@@ -115,7 +115,7 @@ serial_t *get_serial_obj(UART_HandleTypeDef *huart)
115
115
* @param obj : pointer to serial_t structure
116
116
* @retval None
117
117
*/
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 )
119
119
{
120
120
if (obj == NULL ) {
121
121
return ;
@@ -407,11 +407,31 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
407
407
huart -> Init .Mode = UART_MODE_TX_RX ;
408
408
huart -> Init .HwFlowCtl = flow_control ;
409
409
huart -> Init .OverSampling = UART_OVERSAMPLING_16 ;
410
+ #if defined(UART_ADVFEATURE_NO_INIT )
411
+ // Default value
412
+ huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
410
413
#if defined(UART_ADVFEATURE_SWAP_INIT )
411
- huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_SWAP_INIT ;
414
+ huart -> AdvancedInit .AdvFeatureInit | = UART_ADVFEATURE_SWAP_INIT ;
412
415
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
415
435
#endif
416
436
#ifdef UART_ONE_BIT_SAMPLE_DISABLE
417
437
huart -> Init .OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE ;
@@ -812,7 +832,7 @@ void uart_debug_init(void)
812
832
serial_debug .pin_tx = pinmap_pin (DEBUG_UART , PinMap_UART_TX );
813
833
#endif
814
834
/* 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 );
816
836
}
817
837
}
818
838
0 commit comments