STM32F407 - 低功耗模式之待机唤醒
来源:互联网 发布:网络招聘兼职 编辑:程序博客网 时间:2024/04/30 15:26
默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,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外部事件的中断服务
函数里,进入待机模式
- STM32F407 - 低功耗模式之待机唤醒
- stm32低功耗实验之待机模式
- STM32F103VCT6低功耗测试(待机模式)
- STM32F103VCT6低功耗测试(待机模式)
- stm32的低功耗模式和RTC闹钟唤醒
- STM32之待机唤醒
- STM32之待机唤醒
- 【STM8L】STM8L之低功耗模式
- FreeRTOS低功耗之tickless模式
- FreeRTOS 低功耗之 tickless 模式
- stm32l011F4之 低功耗睡眠模式
- KL25利用低功耗定时器进行MCU低功耗唤醒
- STM32--低功耗模式
- NFC低功耗模式
- MSP430低功耗模式
- MSP430--低功耗模式
- stm32低功耗模式
- 低功耗模式操作
- android轻量级缓存框架ACache
- 防微信摇一摇+钟摆动画
- 使用gulp实现前端自动化
- Android点击EditText外面隐藏输入法
- Json DFS parse(PG)
- STM32F407 - 低功耗模式之待机唤醒
- extjs 下拉框增加空选项
- LeetCode 299. Bulls and Cows
- jmeter学习记录(二):简单web测试流程
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
- Dijkstra求最短路径
- 水环境监测系统
- GIT的操作
- PHP之六_MySQL数据库设计