@@ -131,7 +131,7 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
131131 USART_TypeDef * uart_rx = pinmap_peripheral (obj -> pin_rx , PinMap_UART_RX );
132132
133133 /* Pins Rx/Tx must not be NP */
134- if (uart_rx == NP || uart_tx == NP ) {
134+ if (( obj -> pin_rx != NC && uart_rx == NP ) || uart_tx == NP ) {
135135 core_debug ("ERROR: at least one UART pin has no peripheral\n" );
136136 return ;
137137 }
@@ -288,7 +288,9 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
288288
289289 /* Configure UART GPIO pins */
290290 pinmap_pinout (obj -> pin_tx , PinMap_UART_TX );
291- pinmap_pinout (obj -> pin_rx , PinMap_UART_RX );
291+ if (uart_rx != NP ) {
292+ pinmap_pinout (obj -> pin_rx , PinMap_UART_RX );
293+ }
292294
293295 /* Configure uart */
294296 uart_handlers [obj -> index ] = huart ;
@@ -359,7 +361,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
359361 }
360362#endif
361363
362- if (HAL_UART_Init (huart ) != HAL_OK ) {
364+ if (uart_rx == NP ) {
365+ if (HAL_HalfDuplex_Init (huart ) != HAL_OK ) {
366+ return ;
367+ }
368+ } else if (HAL_UART_Init (huart ) != HAL_OK ) {
363369 return ;
364370 }
365371}
@@ -732,6 +738,32 @@ void uart_attach_tx_callback(serial_t *obj, int (*callback)(serial_t *))
732738 HAL_NVIC_EnableIRQ (obj -> irq );
733739}
734740
741+ /**
742+ * Enable transmitter for half-duplex mode. NOOP in full-fuplex mode
743+ *
744+ * @param obj : pointer to serial_t structure
745+ * @retval none
746+ */
747+ void uart_enable_tx (serial_t * obj )
748+ {
749+ if (obj != NULL && obj -> pin_rx == NC ) {
750+ HAL_HalfDuplex_EnableTransmitter (uart_handlers [obj -> index ]);
751+ }
752+ }
753+
754+ /**
755+ * Enable receiver for half-duplex mode. NOOP in full-fuplex mode
756+ *
757+ * @param obj : pointer to serial_t structure
758+ * @retval none
759+ */
760+ void uart_enable_rx (serial_t * obj )
761+ {
762+ if (obj != NULL && obj -> pin_rx == NC ) {
763+ HAL_HalfDuplex_EnableReceiver (uart_handlers [obj -> index ]);
764+ }
765+ }
766+
735767/**
736768 * @brief Return index of the serial handler
737769 * @param UartHandle pointer on the uart reference
0 commit comments