@@ -479,6 +479,10 @@ static bool _uartAttachPins(uint8_t uart_num, int8_t rxPin, int8_t txPin, int8_t
479479 ret &= perimanSetPinBus (rxPin , ESP32_BUS_TYPE_UART_RX , (void * )uart , uart_num , -1 );
480480 if (ret ) {
481481 uart -> _rxPin = rxPin ;
482+ // set Peripheral Manager deInit Callback for this UART pin
483+ if (perimanGetBusDeinit (ESP32_BUS_TYPE_UART_RX ) == NULL ) {
484+ perimanSetBusDeinit (ESP32_BUS_TYPE_UART_RX , _uartDetachBus_RX );
485+ }
482486 }
483487 }
484488 if (!ret ) {
@@ -502,6 +506,10 @@ static bool _uartAttachPins(uint8_t uart_num, int8_t rxPin, int8_t txPin, int8_t
502506 ret &= perimanSetPinBus (txPin , ESP32_BUS_TYPE_UART_TX , (void * )uart , uart_num , -1 );
503507 if (ret ) {
504508 uart -> _txPin = txPin ;
509+ // set Peripheral Manager deInit Callback for this UART pin
510+ if (perimanGetBusDeinit (ESP32_BUS_TYPE_UART_TX ) == NULL ) {
511+ perimanSetBusDeinit (ESP32_BUS_TYPE_UART_TX , _uartDetachBus_TX );
512+ }
505513 }
506514 }
507515 if (!ret ) {
@@ -525,6 +533,10 @@ static bool _uartAttachPins(uint8_t uart_num, int8_t rxPin, int8_t txPin, int8_t
525533 ret &= perimanSetPinBus (ctsPin , ESP32_BUS_TYPE_UART_CTS , (void * )uart , uart_num , -1 );
526534 if (ret ) {
527535 uart -> _ctsPin = ctsPin ;
536+ // set Peripheral Manager deInit Callback for this UART pin
537+ if (perimanGetBusDeinit (ESP32_BUS_TYPE_UART_CTS ) == NULL ) {
538+ perimanSetBusDeinit (ESP32_BUS_TYPE_UART_CTS , _uartDetachBus_CTS );
539+ }
528540 }
529541 }
530542 if (!ret ) {
@@ -548,6 +560,10 @@ static bool _uartAttachPins(uint8_t uart_num, int8_t rxPin, int8_t txPin, int8_t
548560 ret &= perimanSetPinBus (rtsPin , ESP32_BUS_TYPE_UART_RTS , (void * )uart , uart_num , -1 );
549561 if (ret ) {
550562 uart -> _rtsPin = rtsPin ;
563+ // set Peripheral Manager deInit Callback for this UART pin
564+ if (perimanGetBusDeinit (ESP32_BUS_TYPE_UART_RTS ) == NULL ) {
565+ perimanSetBusDeinit (ESP32_BUS_TYPE_UART_RTS , _uartDetachBus_RTS );
566+ }
551567 }
552568 }
553569 if (!ret ) {
@@ -567,14 +583,6 @@ int8_t uart_get_TxPin(uint8_t uart_num) {
567583 return _uart_bus_array [uart_num ]._txPin ;
568584}
569585
570- void uart_init_PeriMan (void ) {
571- // set Peripheral Manager deInit Callback for each UART pin
572- perimanSetBusDeinit (ESP32_BUS_TYPE_UART_RX , _uartDetachBus_RX );
573- perimanSetBusDeinit (ESP32_BUS_TYPE_UART_TX , _uartDetachBus_TX );
574- perimanSetBusDeinit (ESP32_BUS_TYPE_UART_CTS , _uartDetachBus_CTS );
575- perimanSetBusDeinit (ESP32_BUS_TYPE_UART_RTS , _uartDetachBus_RTS );
576- }
577-
578586// Routines that take care of UART events will be in the HardwareSerial Class code
579587void uartGetEventQueue (uart_t * uart , QueueHandle_t * q ) {
580588 // passing back NULL for the Queue pointer when UART is not initialized yet
0 commit comments