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


10

编辑:这个问题是错误的。stm325105只有一个唤醒引脚。但是其他ST部分具有多个唤醒引脚,因此给定的答案对此有效。


我有一个stm32f105,其中有两个连接到唤醒输入的瞬时按钮。处理器被置于待机模式。当按下任意按钮或RTC计时器触发时,CPU会唤醒。

问题是我希望CPU根据触发的唤醒输入执行不同的操作。根据5.3.5ST stm32f105xx参考手册,没有寄存器被保留,除了表明我们已经唤醒状态寄存器(但不是以谁)和42个备份寄存器。

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

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

此ST论坛帖子,如何确定从待机状态唤醒的起源?,表明我无法检测到软件中触发了哪种唤醒。我发现那里没有其他可以给人更多启发的帖子。

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


1
让按钮充上一个盖子,然后读取
PlasmaHH

1
查找了一些STM32F105变体,它们只有一个唤醒引脚。您确切指的是哪一部分?
berendi-抗议

@berendi正如您所说,我的STM32F105只有一个唤醒引脚。它配置为“停止模式”,而不是我在问题中提到的“待机”模式。它使用EXTI事件进行唤醒。我将那些“ EXTI事件”的含义与“唤醒引脚”混淆了。但是我想如果有人需要在待机模式下区分“ RTC唤醒”或“唤醒引脚唤醒”,Olin提供的答案仍然有用。是否有人对如何编辑此问题以匹配奥林斯答案提出建议?开头的小字条说明了什么问题?整个重新编辑?还是我应该删除整个问题?
DanielNäslund'17

1
有一些具有多个唤醒引脚的ST控制器,例如F0,F3,L0或L1,在这些控制器中,它们只有一个唤醒输入标志,因此从待机状态退出后实际上无法确定源。意法半导体已经在最新的F7和L4系列中首先纠正了这一疏忽,它们对每个唤醒输入都有单独的标志。
berendi-抗议

Answers:


11

我不知道这ST部分的详细信息,所以我假设您对此的描述是正确的。

按下任一按钮后,处理器应立即唤醒。如果它具有内部RC振荡器,则尤其如此。即使出于精度原因最终需要从晶振开始运行,也许您也可以让零件从内部RC开始,然后再切换至晶振。虽然我不知道您是否是其中一员,但仍有许多微控制器可以执行此类操作。

无论如何,您都应在唤醒后尽快读取两个输入。除非该ST微型控制器有异常现象,否则从按下按钮起应在几毫秒到几十毫秒之间。

为确保线路仍然很低,请在释放按钮后使用电容器将线路保持最长时间100 ms。

例如,假设保证的逻辑低输入电平为电源电压的20%。该线用电阻上拉,并有一个接地电容。该按钮将线接地。因此,该线浮空,并在按下按钮时被迫接地。释放按钮时,电压朝着电源呈指数衰减。

衰减到最终值的20%的时间常数为0.22。假设您要保证在按下按钮后100ms内线路看起来很低。这意味着RC时间常数必须为450 ms。上拉电阻为100kΩ时,电容需要为4.5 µF。因此,一个4.7 µF 10 V的电容非常好。

总之,这是电路:


1
相反,STM32在上升沿唤醒。另外,afaik总是以内部时钟开始,切换到外部晶振和ll由软件完成。问题出在CubeMX工具提供或生成的启动代码上,这使得在设置时钟树之前运行用户代码有些困难。
berendi-抗议
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.