@@ -128,12 +128,20 @@ void uart_init(serial_t *obj)
128
128
129
129
// Enable USART clock
130
130
if (obj -> uart == USART1 ) {
131
+ #ifdef STM32L4xx
132
+ // Configure HSI as source clock for low power wakeup clock
133
+ __HAL_RCC_USART1_CONFIG (RCC_USART1CLKSOURCE_HSI );
134
+ #endif
131
135
__HAL_RCC_USART1_FORCE_RESET ();
132
136
__HAL_RCC_USART1_RELEASE_RESET ();
133
137
__HAL_RCC_USART1_CLK_ENABLE ();
134
138
obj -> index = 0 ;
135
139
obj -> irq = USART1_IRQn ;
136
140
} else if (obj -> uart == USART2 ) {
141
+ #ifdef STM32L4xx
142
+ // Configure HSI as source clock for low power wakeup clock
143
+ __HAL_RCC_USART2_CONFIG (RCC_USART2CLKSOURCE_HSI );
144
+ #endif
137
145
__HAL_RCC_USART2_FORCE_RESET ();
138
146
__HAL_RCC_USART2_RELEASE_RESET ();
139
147
__HAL_RCC_USART2_CLK_ENABLE ();
@@ -142,6 +150,10 @@ void uart_init(serial_t *obj)
142
150
}
143
151
#if defined(USART3_BASE )
144
152
else if (obj -> uart == USART3 ) {
153
+ #ifdef STM32L4xx
154
+ // Configure HSI as source clock for low power wakeup clock
155
+ __HAL_RCC_USART3_CONFIG (RCC_USART3CLKSOURCE_HSI );
156
+ #endif
145
157
__HAL_RCC_USART3_FORCE_RESET ();
146
158
__HAL_RCC_USART3_RELEASE_RESET ();
147
159
__HAL_RCC_USART3_CLK_ENABLE ();
@@ -151,6 +163,10 @@ void uart_init(serial_t *obj)
151
163
#endif
152
164
#if defined(UART4_BASE )
153
165
else if (obj -> uart == UART4 ) {
166
+ #ifdef STM32L4xx
167
+ // Configure HSI as source clock for low power wakeup clock
168
+ __HAL_RCC_UART4_CONFIG (RCC_UART4CLKSOURCE_HSI );
169
+ #endif
154
170
__HAL_RCC_UART4_FORCE_RESET ();
155
171
__HAL_RCC_UART4_RELEASE_RESET ();
156
172
__HAL_RCC_UART4_CLK_ENABLE ();
@@ -168,6 +184,10 @@ void uart_init(serial_t *obj)
168
184
#endif
169
185
#if defined(UART5_BASE )
170
186
else if (obj -> uart == UART5 ) {
187
+ #ifdef STM32L4xx
188
+ // Configure HSI as source clock for low power wakeup clock
189
+ __HAL_RCC_UART5_CONFIG (RCC_UART5CLKSOURCE_HSI );
190
+ #endif
171
191
__HAL_RCC_UART5_FORCE_RESET ();
172
192
__HAL_RCC_UART5_RELEASE_RESET ();
173
193
__HAL_RCC_UART5_CLK_ENABLE ();
@@ -284,6 +304,7 @@ void uart_init(serial_t *obj)
284
304
huart -> Init .Mode = UART_MODE_TX_RX ;
285
305
huart -> Init .HwFlowCtl = UART_HWCONTROL_NONE ;
286
306
huart -> Init .OverSampling = UART_OVERSAMPLING_16 ;
307
+ huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
287
308
// huart->Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
288
309
289
310
if (HAL_UART_Init (huart ) != HAL_OK ) {
@@ -854,6 +875,19 @@ void UART10_IRQHandler(void)
854
875
}
855
876
#endif
856
877
878
+ /**
879
+ * @brief HAL UART Call Back
880
+ * @param UART handler
881
+ * @retval None
882
+ */
883
+ void HAL_UARTEx_WakeupCallback (UART_HandleTypeDef * huart )
884
+ {
885
+ uint8_t index = uart_index (huart );
886
+ serial_t * obj = rx_callback_obj [index ];
887
+
888
+ HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
889
+ }
890
+
857
891
#ifdef __cplusplus
858
892
}
859
893
#endif
0 commit comments