@@ -125,9 +125,14 @@ void uart_init(serial_t *obj)
125
125
printf ("ERROR: UART pins mismatch\n" );
126
126
return ;
127
127
}
128
+
128
129
// Enable USART clock
129
130
#if defined(USART1_BASE )
130
131
else if (obj -> uart == USART1 ) {
132
+ #ifdef STM32L4xx
133
+ // Configure HSI as source clock for low power wakeup clock
134
+ __HAL_RCC_USART1_CONFIG (RCC_USART1CLKSOURCE_HSI );
135
+ #endif
131
136
__HAL_RCC_USART1_FORCE_RESET ();
132
137
__HAL_RCC_USART1_RELEASE_RESET ();
133
138
__HAL_RCC_USART1_CLK_ENABLE ();
@@ -137,6 +142,10 @@ void uart_init(serial_t *obj)
137
142
#endif
138
143
#if defined(USART2_BASE )
139
144
else if (obj -> uart == USART2 ) {
145
+ #ifdef STM32L4xx
146
+ // Configure HSI as source clock for low power wakeup clock
147
+ __HAL_RCC_USART2_CONFIG (RCC_USART2CLKSOURCE_HSI );
148
+ #endif
140
149
__HAL_RCC_USART2_FORCE_RESET ();
141
150
__HAL_RCC_USART2_RELEASE_RESET ();
142
151
__HAL_RCC_USART2_CLK_ENABLE ();
@@ -146,6 +155,10 @@ void uart_init(serial_t *obj)
146
155
#endif
147
156
#if defined(USART3_BASE )
148
157
else if (obj -> uart == USART3 ) {
158
+ #ifdef STM32L4xx
159
+ // Configure HSI as source clock for low power wakeup clock
160
+ __HAL_RCC_USART3_CONFIG (RCC_USART3CLKSOURCE_HSI );
161
+ #endif
149
162
__HAL_RCC_USART3_FORCE_RESET ();
150
163
__HAL_RCC_USART3_RELEASE_RESET ();
151
164
__HAL_RCC_USART3_CLK_ENABLE ();
@@ -155,6 +168,10 @@ void uart_init(serial_t *obj)
155
168
#endif
156
169
#if defined(UART4_BASE )
157
170
else if (obj -> uart == UART4 ) {
171
+ #ifdef STM32L4xx
172
+ // Configure HSI as source clock for low power wakeup clock
173
+ __HAL_RCC_UART4_CONFIG (RCC_UART4CLKSOURCE_HSI );
174
+ #endif
158
175
__HAL_RCC_UART4_FORCE_RESET ();
159
176
__HAL_RCC_UART4_RELEASE_RESET ();
160
177
__HAL_RCC_UART4_CLK_ENABLE ();
@@ -172,6 +189,10 @@ void uart_init(serial_t *obj)
172
189
#endif
173
190
#if defined(UART5_BASE )
174
191
else if (obj -> uart == UART5 ) {
192
+ #ifdef STM32L4xx
193
+ // Configure HSI as source clock for low power wakeup clock
194
+ __HAL_RCC_UART5_CONFIG (RCC_UART5CLKSOURCE_HSI );
195
+ #endif
175
196
__HAL_RCC_UART5_FORCE_RESET ();
176
197
__HAL_RCC_UART5_RELEASE_RESET ();
177
198
__HAL_RCC_UART5_CLK_ENABLE ();
@@ -288,6 +309,9 @@ void uart_init(serial_t *obj)
288
309
huart -> Init .Mode = UART_MODE_TX_RX ;
289
310
huart -> Init .HwFlowCtl = UART_HWCONTROL_NONE ;
290
311
huart -> Init .OverSampling = UART_OVERSAMPLING_16 ;
312
+ #if defined(STM32F0xx ) || defined(STM32F3xx ) || defined(STM32F7xx ) || defined(STM32L0xx ) || defined(STM32L4xx )
313
+ huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
314
+ #endif // STM32F0xx || STM32F3xx || STM32F7xx || STM32L0xx || STM32L4xx
291
315
// huart->Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
292
316
293
317
if (HAL_UART_Init (huart ) != HAL_OK ) {
@@ -866,6 +890,19 @@ void UART10_IRQHandler(void)
866
890
}
867
891
#endif
868
892
893
+ /**
894
+ * @brief HAL UART Call Back
895
+ * @param UART handler
896
+ * @retval None
897
+ */
898
+ void HAL_UARTEx_WakeupCallback (UART_HandleTypeDef * huart )
899
+ {
900
+ uint8_t index = uart_index (huart );
901
+ serial_t * obj = rx_callback_obj [index ];
902
+
903
+ HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
904
+ }
905
+
869
906
#ifdef __cplusplus
870
907
}
871
908
#endif
0 commit comments