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外部事件的中断服务

函数里,进入待机模式



0 0
原创粉丝点击