检测哪个瞬时开关导致 STM32 cpu 唤醒

电器工程 微控制器 stm32 stm32f10x 睡觉 英石
2022-01-24 05:57:35

编辑:这个问题是错误的。stm325105 只有一个唤醒引脚。但是其他 ST 部件有不止一个唤醒引脚,所以给定的答案对那些有效。


我有一个 stm32f105,它有两个连接到唤醒输入的瞬时按钮。处理器进入待机模式。当任何一个按钮被按下,或者 RTC 定时器触发时,cpu 就会被唤醒。

问题是我希望 cpu 根据触发的唤醒输入来做不同的事情。根据ST stm32f105xx 参考手册中的5.3.5除了指示我们已被唤醒(但不是由谁唤醒)的状态寄存器和 42 个备份寄存器外,没有保留任何寄存器。

待机模式允许实现最低功耗。它基于 Cortex ® -M3 深度睡眠模式,并禁用了稳压器。1.8 V 域因此断电。PLL、HSI 振荡器和 HSE 振荡器也被关闭。除了备份域和待机电路中的寄存器外,SRAM 和寄存器内容都将丢失。

从待机模式唤醒后,程序执行以与复位后相同的方式重新启动(引导引脚采样、获取向量复位等)。电源控制/状态寄存器 (PWR_CSR) 中的 SBF 状态标志指示 MCU 处于待机模式。

这个ST论坛帖子,如何确定Wakeup from Standby的来源?,表明我无法检测到软件中触发了哪个唤醒。我发现那里没有其他帖子可以提供更多启发。

唤醒后如何使用软件或硬件来确定触发了哪个唤醒输入?

1个回答

我不知道这个 ST 部分的细节,所以我假设你对它的描述是正确的。

按下任一按钮后,处理器应很快唤醒。如果它具有内部 RC 振荡器,则尤其如此。即使您最终出于精度原因需要从晶体运行,也许您可​​以让部件从内部 RC 开始,然后再切换到晶体。有一些微型机器可以做这样的事情,虽然我不知道你的是否是其中之一。

在任何情况下,您都应在唤醒后尽快读取这两个输入。除非这个 ST micro 有什么不寻常的地方,否则应该是从按钮按下开始的几毫秒到几十毫秒。

为保证线路仍然处于低电平,请在释放按钮后使用电容器将线路保持低电平长达 100 毫秒。

例如,假设保证的逻辑低输入电平是电源电压的 20%。这条线用一个电阻上拉,并有一个接地电容。该按钮将线路短路到地。因此,线路浮在高位,并在按下按钮时主动强制接地。当按钮被释放时,电压向电源呈指数衰减。

衰减到最终值的 20% 发生在 0.22 时间常数中。假设您想保证按下按钮后线路在 100 毫秒内看起来很低。这意味着 RC 时间常数必须为 450 ms。使用 100 kΩ 上拉电阻时,电容需要为 4.5 µF。所以 4.7 µF 10 V 电容就可以了。

总而言之,这是电路: