@@ -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