我的配置: STM32F407VGT,ide STM32CubeIDE。
我把单片机置于待机状态,有两种方式使单片机保持待机状态。第一种方法是将PA0引脚连接到3.3v,第二种方法是等待RTC计时器计数到指定值。两种方法都很好。
现在我的问题是如何区分事件?我在数据表中找到了这个
位8 EWUP:启用WKUP引脚
此位由软件设置并清除。
0: WKUP引脚用于通用I/O。WKUP引脚上的事件不会从备用模式唤醒设备。1: WKUP引脚用于从待机模式唤醒,并强制在输入下拉配置(上升边缘WKUP针唤醒-系统从待机模式)。注意:此位被系统重置。
用这段代码,我想出一个主意
if(PWR_CSR_EWUP == 0x00000100) // PA0 is used to leave standby mode
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
HAL_Delay(2500);
}
else // mcu leave standby mode because RTC timer count desired value
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
HAL_Delay(2500);
}
Enter_StandbyMode();由于某些原因,我总是知道PWR_CSR_EWUP与0x00000100不相等,即使我通过将PA0连接到3.3V来退出待机模式。因此,得出的结论是,我总是得到它的其他状态(绿色led (PD14)总是打开后,单片机离开待机模式)。
发布于 2020-04-07 21:24:42
这似乎需要更正两件事:
您必须读取寄存器PWR_CSR_EWUP
((PWR_CSR & PWR_CSR_EWUP) == PWR_CSR_EWUP)。当然,您也可以检查STM32CubeF4 HAL库中传递所需信息的函数。当您查看它的实现时,您应该会发现类似的东西(但我承认我还没有检查.)。
https://stackoverflow.com/questions/59989237
复制相似问题