@@ -306,7 +306,12 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
306
306
huart -> Init .Parity = parity ;
307
307
huart -> Init .Mode = UART_MODE_TX_RX ;
308
308
huart -> Init .HwFlowCtl = UART_HWCONTROL_NONE ;
309
+ #if defined(ARDUINO_SensorXEL ) || defined(ARDUINO_SensorXEL_revE )\
310
+ || defined(ARDUINO_PowerXEL )
311
+ huart -> Init .OverSampling = UART_OVERSAMPLING_8 ;
312
+ #else
309
313
huart -> Init .OverSampling = UART_OVERSAMPLING_16 ;
314
+ #endif
310
315
#if !defined(STM32F1xx ) && !defined(STM32F2xx ) && !defined(STM32F4xx )\
311
316
&& !defined(STM32L1xx )
312
317
huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
@@ -373,6 +378,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
373
378
} else if (HAL_UART_Init (huart ) != HAL_OK ) {
374
379
return ;
375
380
}
381
+
382
+ #if defined(ARDUINO_SensorXEL ) || defined(ARDUINO_SensorXEL_revE )\
383
+ || defined(ARDUINO_PowerXEL )
384
+ HAL_UART_Receive_DMA (huart , obj -> rx_buff , SERIAL_RX_BUFFER_SIZE );
385
+ #endif
376
386
}
377
387
378
388
/**
@@ -800,7 +810,7 @@ uint8_t uart_index(UART_HandleTypeDef *huart)
800
810
void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart )
801
811
{
802
812
serial_t * obj = get_serial_obj (huart );
803
- if (obj ) {
813
+ if (obj && obj -> rx_callback != NULL ) {
804
814
obj -> rx_callback (obj );
805
815
}
806
816
}
@@ -852,7 +862,19 @@ void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
852
862
/* Restart receive interrupt after any error */
853
863
serial_t * obj = get_serial_obj (huart );
854
864
if (obj && !serial_rx_active (obj )) {
865
+ #if defined(ARDUINO_SensorXEL ) || defined(ARDUINO_SensorXEL_revE )\
866
+ || defined(ARDUINO_PowerXEL )
867
+ if (huart -> Instance == USART1 || huart -> Instance == USART2 ){
868
+ obj -> rx_head = SERIAL_RX_BUFFER_SIZE - obj -> handle .hdmarx -> Instance -> CNDTR ;
869
+ obj -> rx_tail = obj -> rx_head ;
870
+ memset (obj -> rx_buff , 0 , SERIAL_RX_BUFFER_SIZE );
871
+ HAL_UART_Receive_DMA (huart , obj -> rx_buff , SERIAL_RX_BUFFER_SIZE );
872
+ }else {
873
+ HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
874
+ }
875
+ #else
855
876
HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
877
+ #endif
856
878
}
857
879
}
858
880
@@ -1063,9 +1085,15 @@ void UART10_IRQHandler(void)
1063
1085
*/
1064
1086
void HAL_UARTEx_WakeupCallback (UART_HandleTypeDef * huart )
1065
1087
{
1088
+ #if defined(ARDUINO_SensorXEL ) || defined(ARDUINO_SensorXEL_revE )\
1089
+ || defined(ARDUINO_PowerXEL )
1090
+ (void )huart ;
1091
+ #else
1066
1092
serial_t * obj = get_serial_obj (huart );
1067
1093
HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
1094
+ #endif
1068
1095
}
1096
+
1069
1097
#endif /* HAL_UART_MODULE_ENABLED */
1070
1098
1071
1099
#ifdef __cplusplus
0 commit comments