首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何区分哪个事件导致mcu退出待机/睡眠模式

问如何区分哪个事件导致mcu退出待机/睡眠模式
EN

Stack Overflow用户
提问于 2020-01-30 15:23:04
回答 1查看 455关注 0票数 1

我的配置: STM32F407VGT,ide STM32CubeIDE。

我把单片机置于待机状态,有两种方式使单片机保持待机状态。第一种方法是将PA0引脚连接到3.3v,第二种方法是等待RTC计时器计数到指定值。两种方法都很好。

现在我的问题是如何区分事件?我在数据表中找到了这个

位8 EWUP:启用WKUP引脚

此位由软件设置并清除。

0: WKUP引脚用于通用I/O。WKUP引脚上的事件不会从备用模式唤醒设备。1: WKUP引脚用于从待机模式唤醒,并强制在输入下拉配置(上升边缘WKUP针唤醒-系统从待机模式)。注意:此位被系统重置。

用这段代码,我想出一个主意

代码语言:javascript
复制
  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)总是打开后,单片机离开待机模式)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 21:24:42

这似乎需要更正两件事:

您必须读取寄存器PWR_CSR_EWUP

  • you PWR_CSR,而不是位掩码不应该检查是否相等(因为32位寄存器包含多6个指示其他内容的位),而是屏蔽所需的位并检查结果:((PWR_CSR & PWR_CSR_EWUP) == PWR_CSR_EWUP)。

当然,您也可以检查STM32CubeF4 HAL库中传递所需信息的函数。当您查看它的实现时,您应该会发现类似的东西(但我承认我还没有检查.)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59989237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档