七毛钱 发表于 2025-8-18 16:00

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的寄存器进行清零。

麻花油条 发表于 2025-8-26 16:29

可能是由于唤醒标志未正确清除。

duo点 发表于 2025-8-26 16:30

可能是低功耗模式配置错误或硬件问题。

内政奇才 发表于 2025-8-26 16:30

唤醒源是否已正确使能?

海滨消消 发表于 2025-8-26 16:31

唤醒后检查唤醒源,唤醒后,必须 清除唤醒标志,否则下次进入低功耗模式时可能无法正确唤醒。

豌豆爹 发表于 2025-8-26 16:31

唤醒源对应的标志位是否已被清除?

海滨消消 发表于 2025-8-26 16:32

唤醒信号不稳定?

麻花油条 发表于 2025-8-26 16:32

检查 VDD 和 VBAT 电源稳定性。
页: [1]
查看完整版本: STM32U575从低功耗模式唤醒后,无法获取唤醒源