历史上的今天
今天是:2024年09月10日(星期二)
2018年09月10日 | STM32F407 - 低功耗模式之待机唤醒
2018-09-10 来源:eefocus
默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下, CPU 通过HCLK 提供时钟,并执行程序代码。
STM32F407提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外部事件时)节省功耗。
低功耗模式
| 低功耗模式: | 功耗比较: |
| 睡眠模式(Cortex™-M4F内核停止,外设保持运行) | - |
| 停止模式(所有时钟都停止) | 次低功耗 |
| 待机模式(1.2 V域断电) | 最低功耗 |
以上之外的降低运行模式功耗的方法:
● 降低系统时钟速度
● 不使用APBx和AHBx时,关闭对应的外设时钟(在运行模式下降低功耗的有效手段)
<表18>
待机模式(篇幅有限,本文仅介绍待机模式)
如何进入和退出待机模式:
<表23>
待机模式下的I/O状态:
在待机模式下,除以下各部分以外,所有 I/O 引脚都处于高阻态
● 复位引脚(仍可用)
● RTC_AF1引脚(PC13)(如果针对入侵、时间戳、RTC闹钟输出或 RTC 时钟校准输出进行了配置)
● WKUP引脚(PA0)(如果使能)
※高阻态:电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。
调试模式(低功耗模式下,又需要调试的话,则需参考[对低功耗模式的调试支持]的章节)
默认情况下,如果使用调试功能时应用程序将MCU置于停止模式或待机模式,调试连接将中断。这是因为Cortex™-M4F内核时钟停止了。
不过,通过设置 DBGMCU_CR寄存器中的一些配置位,即使MCU进入低功耗模式,仍可使用软件对其进行调试。
最简demo(库函数配置)
demo:
类似于手机的开关机行为,通过长按进行开机(待机唤醒),再次长按进行关机(进入待机模式)。
demo设计思路:
-- 复位 --
系统复位 -> 各种初始化 -> 长按判断(是否3秒持续高电平) -> 否的话,进入待机模式
-> 是的话,正常开机(不进入待机模式)
-- 待机唤醒 --
WK_UP引脚产生唤醒事件(上升沿) -> 唤醒(复位)
-- 进入待机 --
运行模式 -> WK_UP引脚产生外部事件(上升沿) -> 外部中断 -> 长按判断(是否3秒持续高电平)-> 是的话,进入待机模式
-> 否的话,无效事件返回
不得不提的两件事(针对本demo):
1)WK_UP引脚作为事件源的设置:
● 进入待机模式之前(执行WFI指令),需要将WK_UP设置为用于唤醒事件(用于实现开机)。
● 初始化时,将WK_UP设置为用于外部事件(用于实现关机)。
2)WK_UP引脚的上升沿在不同模式产生的是不同的事件:
● 在待机模式下,WK_UP引脚的上升沿产生的是唤醒事件
● 在运行模式下,WK_UP引脚的上升沿产生的是外部事件
基于库函数的具体设计:
-- 初始化 --
1)使能电源时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
2)设置WK_UP引脚作为唤醒源。
PWR_WakeUpPinCmd(ENABLE);
3)设置SLEEPDEEP位、PDDS位,执行WFI指令,进入待机模式。(关于SLEEPDEEP,参考《STM32F407 Programming manual.pdf》)
对于库函数而言,以上配置由函数PWR_EnterSTANDBYMode进行实现。
void PWR_EnterSTANDBYMode(void);
4)WK_UP外部事件的中断服务
函数里,进入待机模式
上一篇:STM32--读写内部Flash
史海拾趣
|
E:\\mobile.bmp 如图,请教高手怎么实现这样的文件打开时的路径选择界面, 最上面一行显示当前路径, 下面可以点选,进入或返回上一级路径, 多谢高手指教。 … 查看全部问答> |
|
有哪位兄台知道如果利用AT命令控制短信猫设备拨打USSD号码:如:*111*222×NNN#这样的号码。 如果有成功实现过的请和我联系。QQ:61238333.如果能帮我解决问题。现金200元酬谢。… 查看全部问答> |
|
SimpliciTI-IAR-1.2.0>>CC430EM里的程序为何不能用了???? 我用SimpliciTI-IAR-1.2.0里的cc430例程,用cc430F5137模块来测试程序AP_as_Data_Hub,为何AP和ED连接不上了,我的ED发送地址是0xFF,为何发不出去了???望各位老师能够解答我的难题 !在此谢过!… 查看全部问答> |




