STM32U575从低功耗模式唤醒后,无法获取唤醒源
如题,这个问题对我造成了很大的困扰使用的芯片是stm32U575QIIXQ,我使用cubeMX创建初始工程,在PWR中定义了WKUP5,使用PA3作为我的唤醒引脚。 同时我使用RTC定时器唤醒。我希望可以通过一个按钮(连接在pa3上,常规为高电平,按下低电平)来随时唤醒MCU,也希望使用RTC定时器周期性唤醒。
将外部中断配置成事件模式,启用HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN5_LOW_1)PA3唤醒事件,同时启用HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN7_HIGH_3)RTC的定时器唤醒事件
配置好后,使用HAL_RTCEx_SetWakeUpTimer_IT设置定时器时长,之后调用
HAL_PWREx_EnterSHUTDOWNMode()进入shutdown模式。
下载之后运行,RTC定时唤醒和按键唤醒功能都正常。但我有一段逻辑是获取唤醒源,根据唤醒源来分发后续的步骤。 但获取唤醒源却一直异常。通过串口打印PWR的WUSR寄存器的值,发现上电一开始的时候,WUSR寄存器的值全都是零。但如果按照我的配置,RTC唤醒的话,WUSR寄存器应该是0x40(wkup7),而按钮唤醒的话,WUSR寄存器的值应该是0x10(wkup5)。
于是我使用调试模式,在debug模式下单步进行跟踪并查看寄存器状态。非常奇怪的是,在调试模式下,每次唤醒之后读取的WUSR的值却是正常的。
我想问下,为何在调试模式下可以正常读取WUSR的值而正常运行却不可以呢?
另外,经过后续测试,不单单是WUSR寄存器,整个PWR的其他寄存器如(SR, CR,WUCR等)也都是零,我并没有在启动过程中,对PWR的寄存器进行清零。 可能是由于唤醒标志未正确清除。 可能是低功耗模式配置错误或硬件问题。 唤醒源是否已正确使能? 唤醒后检查唤醒源,唤醒后,必须 清除唤醒标志,否则下次进入低功耗模式时可能无法正确唤醒。 唤醒源对应的标志位是否已被清除? 唤醒信号不稳定? 检查 VDD 和 VBAT 电源稳定性。
页:
[1]