@@ -115,7 +115,7 @@ serial_t *get_serial_obj(UART_HandleTypeDef *huart)
115115 * @param obj : pointer to serial_t structure
116116 * @retval None
117117 */
118- void uart_init (serial_t * obj , uint32_t baudrate , uint32_t databits , uint32_t parity , uint32_t stopbits )
118+ void uart_init (serial_t * obj , uint32_t baudrate , uint32_t databits , uint32_t parity , uint32_t stopbits , bool rx_invert , bool tx_invert , bool data_invert )
119119{
120120 if (obj == NULL ) {
121121 return ;
@@ -407,11 +407,31 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
407407 huart -> Init .Mode = UART_MODE_TX_RX ;
408408 huart -> Init .HwFlowCtl = flow_control ;
409409 huart -> Init .OverSampling = UART_OVERSAMPLING_16 ;
410+ #if defined(UART_ADVFEATURE_NO_INIT )
411+ // Default value
412+ huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
410413#if defined(UART_ADVFEATURE_SWAP_INIT )
411- huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_SWAP_INIT ;
414+ huart -> AdvancedInit .AdvFeatureInit | = UART_ADVFEATURE_SWAP_INIT ;
412415 huart -> AdvancedInit .Swap = pin_swap ;
413- #elif defined(UART_ADVFEATURE_NO_INIT )
414- huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
416+ #endif
417+ #if defined(UART_ADVFEATURE_RXINVERT_INIT )
418+ if (rx_invert ) {
419+ huart -> AdvancedInit .AdvFeatureInit |= UART_ADVFEATURE_RXINVERT_INIT ;
420+ huart -> AdvancedInit .RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE ;
421+ }
422+ #endif
423+ #if defined(UART_ADVFEATURE_TXINVERT_INIT )
424+ if (tx_invert ) {
425+ huart -> AdvancedInit .AdvFeatureInit |= UART_ADVFEATURE_TXINVERT_INIT ;
426+ huart -> AdvancedInit .TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE ;
427+ }
428+ #endif
429+ #if defined(UART_ADVFEATURE_DATAINVERT_INIT )
430+ if (data_invert ) {
431+ huart -> AdvancedInit .AdvFeatureInit |= UART_ADVFEATURE_DATAINVERT_INIT ;
432+ huart -> AdvancedInit .DataInvert = UART_ADVFEATURE_DATAINV_ENABLE ;
433+ }
434+ #endif
415435#endif
416436#ifdef UART_ONE_BIT_SAMPLE_DISABLE
417437 huart -> Init .OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE ;
@@ -812,7 +832,7 @@ void uart_debug_init(void)
812832 serial_debug .pin_tx = pinmap_pin (DEBUG_UART , PinMap_UART_TX );
813833#endif
814834 /* serial_debug.pin_rx set by default to NC to configure in half duplex mode */
815- uart_init (& serial_debug , DEBUG_UART_BAUDRATE , UART_WORDLENGTH_8B , UART_PARITY_NONE , UART_STOPBITS_1 );
835+ uart_init (& serial_debug , DEBUG_UART_BAUDRATE , UART_WORDLENGTH_8B , UART_PARITY_NONE , UART_STOPBITS_1 , false, false, false );
816836 }
817837}
818838
0 commit comments