- 调试的时候一定要拔掉调试线,再进行低功耗测试,不然的话JTAG会自动去发信号给stm32造成自动唤醒,这点及其重要。
- 要进行唤醒的串口一定要设置成HSI时钟,这点也最重要,因为stop模式唤醒后默认启动HSI时钟,如果用其他时钟唤醒后是关闭的,如果用串口采用其他时钟,是无法唤醒的。
不推荐采用先将Rx先设置外部中断的方法,那是针对F系列的办法,对于L系列,天然具备串口唤醒低功耗停止模式
注意了以上两点,就可以开始了,下边看代码
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);
WakeUpSelection.WakeUpEvent = UART_WAKEUP_ON_READDATA_NONEMPTY;
if (HAL_UARTEx_StopModeWakeUpSourceConfig(&UartHandle, WakeUpSelection)!= HAL_OK)
{
Error_Handler();
}
/* Enable the UART Wake UP from STOP1 mode Interrupt */
__HAL_UART_ENABLE_IT(&UartHandle, UART_IT_WUF);
/* enable MCU wake-up by UART */
HAL_UARTEx_EnableStopMode(&UartHandle);
/* enter STOP1 mode */
HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WF