@@ -125,6 +125,7 @@ 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 ) {
@@ -288,6 +289,7 @@ void uart_init(serial_t *obj)
288
289
huart -> Init .Mode = UART_MODE_TX_RX ;
289
290
huart -> Init .HwFlowCtl = UART_HWCONTROL_NONE ;
290
291
huart -> Init .OverSampling = UART_OVERSAMPLING_16 ;
292
+ huart -> AdvancedInit .AdvFeatureInit = UART_ADVFEATURE_NO_INIT ;
291
293
// huart->Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
292
294
293
295
if (HAL_UART_Init (huart ) != HAL_OK ) {
@@ -403,6 +405,69 @@ void uart_deinit(serial_t *obj)
403
405
HAL_UART_DeInit (uart_handlers [obj -> index ]);
404
406
}
405
407
408
+ #if defined(HAL_PWR_MODULE_ENABLED ) && defined(UART_IT_WUF )
409
+ /**
410
+ * @brief Function called to configure the uart interface for low power
411
+ * @param obj : pointer to serial_t structure
412
+ * @retval None
413
+ */
414
+ void uart_config_lowpower (serial_t * obj )
415
+ {
416
+ if (obj == NULL ) {
417
+ return ;
418
+ }
419
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0 };
420
+ /* Ensure HSI clock is enable */
421
+ if (__HAL_RCC_GET_FLAG (RCC_FLAG_HSIRDY ) == RESET ) {
422
+ RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSI ;
423
+ RCC_OscInitStruct .HSIState = RCC_HSI_ON ;
424
+ RCC_OscInitStruct .HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT ;
425
+ RCC_OscInitStruct .PLL .PLLState = RCC_PLL_NONE ;
426
+ if (HAL_RCC_OscConfig (& RCC_OscInitStruct )!= HAL_OK ) {
427
+ Error_Handler ();
428
+ }
429
+ }
430
+ /* Configure HSI as source clock for low power wakeup clock */
431
+ switch (obj -> index ) {
432
+ #if defined(USART1_BASE )
433
+ case 0 :
434
+ if (__HAL_RCC_GET_USART1_SOURCE () != RCC_USART1CLKSOURCE_HSI ) {
435
+ __HAL_RCC_USART1_CONFIG (RCC_USART1CLKSOURCE_HSI );
436
+ }
437
+ break ;
438
+ #endif
439
+ #if defined(USART2_BASE ) && defined(__HAL_RCC_USART2_CONFIG )
440
+ case 1 :
441
+ if (__HAL_RCC_GET_USART2_SOURCE () != RCC_USART2CLKSOURCE_HSI ) {
442
+ __HAL_RCC_USART2_CONFIG (RCC_USART2CLKSOURCE_HSI );
443
+ }
444
+ break ;
445
+ #endif
446
+ #if defined(USART3_BASE ) && defined(__HAL_RCC_USART3_CONFIG )
447
+ case 2 :
448
+ if (__HAL_RCC_GET_USART3_SOURCE () != RCC_USART3CLKSOURCE_HSI ) {
449
+ __HAL_RCC_USART3_CONFIG (RCC_USART3CLKSOURCE_HSI );
450
+ }
451
+ break ;
452
+ #endif
453
+ #if defined(UART4_BASE ) && defined(__HAL_RCC_UART4_CONFIG )
454
+ case 3 :
455
+ if (__HAL_RCC_GET_UART4_SOURCE () != RCC_UART4CLKSOURCE_HSI ) {
456
+ __HAL_RCC_UART4_CONFIG (RCC_UART4CLKSOURCE_HSI );
457
+ }
458
+ break ;
459
+ #endif
460
+ #if defined(UART5_BASE ) && defined(__HAL_RCC_UART5_CONFIG )
461
+ case 4 :
462
+ if (__HAL_RCC_GET_UART5_SOURCE () != RCC_UART5CLKSOURCE_HSI ) {
463
+ __HAL_RCC_UART5_CONFIG (RCC_UART5CLKSOURCE_HSI );
464
+ }
465
+ break ;
466
+ #endif
467
+ }
468
+ }
469
+ #endif
470
+
406
471
/**
407
472
* @brief write the data on the uart
408
473
* @param obj : pointer to serial_t structure
@@ -866,6 +931,19 @@ void UART10_IRQHandler(void)
866
931
}
867
932
#endif
868
933
934
+ /**
935
+ * @brief HAL UART Call Back
936
+ * @param UART handler
937
+ * @retval None
938
+ */
939
+ void HAL_UARTEx_WakeupCallback (UART_HandleTypeDef * huart )
940
+ {
941
+ uint8_t index = uart_index (huart );
942
+ serial_t * obj = rx_callback_obj [index ];
943
+
944
+ HAL_UART_Receive_IT (huart , & (obj -> recv ), 1 );
945
+ }
946
+
869
947
#ifdef __cplusplus
870
948
}
871
949
#endif
0 commit comments