完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
转:
低功耗是MCU的一项重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验。 本章节为大家讲解STM32F103,STM32F407和STM32F429的低功耗方式之睡眠模式的一些知识点,第33章讲解FreeRTOS支持的tickless模式是睡眠模式的具体使用例子。 30.1 STM32F103睡眠模式介绍 30.2 STM32F4xx睡眠模式介绍 30.3 低功耗模式的调试支持 30.4 如何有效降低睡眠模式下的功耗 30.5 总结 30.1 STM32F103睡眠模式介绍 说明:在FreeRTOS系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请看STM32F103参考手册和Cortex-M3权威指南。 在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时,用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32F103有三种低功耗模式: (1)睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统滴答定时器Systick等仍在运行)。 (2)停机模式(所有的时钟都已停止)。 (3)待机模式(1.8V电源关闭)。 本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我们需要清楚哪些问题呢?请继续往下看。 |
|
相关推荐
|
|
30.1.1 如何进入睡眠模式
通过执行 WFI(等待中断)或WFE(等待事件)指令进入睡眠状态。根据Cortex™-M3系统控制寄存器中的SLEEPONEXIT位的值,可以通过两种方案选择睡眠模式进入机制: (1)SLEEP-NOW:如果SLEEPONEXIT位被清除,当WFI或WFE被执行时,微控制器立即进入睡眠模式。 (2)SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入睡眠模式。 实际应用中我们采用WFI指令进入睡眠模式,睡眠模式的进入机制是采用的SLEEP-NOW。因为系统复位上电后SLEEPONEXIT位是被清除的,所以这个位也不需要专门的去设置。另外在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 在FreeRTOS系统上,不使用tickless低功耗模式的话,我们可以将WFI指令放到空闲任务里面实现。不过,既然有了tickless模式,基本就不需要采用这种方法了。 30.1.2 如何退出睡眠模式 由于我们是采用指令WFI进入睡眠模式,那么任意一个被嵌套向量中断控制器NVIC响应的外设中断都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。 在FreeRTOS系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意中断也可以将其从睡眠态唤醒。 |
|
|
|
|
|
30.2 STM32F4xx睡眠模式介绍
说明:本小节的内容含STM32F407和STM32F429,在FreeRTOS系统上面实现睡眠方式仅需了解这里讲解的知识基本就够用了,更多睡眠方式的知识请看STM32F4xx参考手册和Cortex-M4权威指南。 默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU通过HCLK 提供时钟,并执行程序代码。系统提供了多个低功耗模式,可在CPU不需要运行时(例如等待外部事件时)节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、短启动时间和可用唤醒源之间寻求最佳平衡。STM32F4xx有三个低功耗模式: (1)睡眠模式(Cortex™-M4F 内核停止,外设保持运行) (2)停机模式(所有时钟都停止) (3)待机模式(1.2 V 域断电) 本章节我们主要讲解睡眠模式,而在实际的睡眠模式编程时我们需要清楚哪些问题呢?请继续往下看。 |
|
|
|
|
|
30.2.1 如何进入睡眠模式
执行 WFI(等待中断)或WFE(等待事件)指令即可进入睡眠模式。根据 Cortex™-M4F 系统控制寄存器中SLEEPONEXIT 位的设置,可以通过两种方案选择睡眠模式进入机制: (1)立即睡眠:如果SLEEPONEXIT 位清零, MCU将在执行WFI或WFE指令时立即进入睡眠模式 (2)退出时睡眠:如果SLEEPONEXIT位置1,MCU将在退出优先级最低的ISR时立即进入睡眠模式。 实际应用中我们采用WFI指令进入睡眠模式,睡眠模式的进入机制是采用的立即睡眠。因为系统复位上电后SLEEPONEXIT位是被清除的,所以这个位也不需要专门的去设置。另外在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 在FreeRTOS系统上,不使用tickless低功耗模式的话,我们可以将WFI指令放到空闲任务里面实现。不过,既然有了tickless模式,基本就不需要采用这种方法了。 30.2.2 如何退出睡眠模式 由于我们是采用指令WFI进入睡眠模式,那么任意一个被嵌套向量中断控制器NVIC响应的外设中断都能将系统从睡眠模式唤醒。并且该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。 在FreeRTOS系统上,主要是周期性执行的系统滴答定时器中断会将系统从睡眠态唤醒,当然,其它的任意中断也可以将其从睡眠态唤醒。 |
|
|
|
|
|
30.3 低功耗模式的调试支持
要进入低功耗模式需要调用指令WFI或WFE。 STM32 支持多个低功耗模式,这些模式可以禁止CPU时钟或降低CPU功耗。内核不允许在调试期间关闭 FCLK 或 HCLK,因为调试期间需要使用它们进行调试连接,因此必须保持激活状态。STM32集成了特殊方法,允许用户在低功耗模式下调试软件。为实现这一功能,调试器必须先设置一些配置寄存器来改变低功耗模式的特性。 (1)在睡眠模式下,调试器必须先置位DBGMCU_CR寄存器的DBG_SLEEP位。这将为HCLK提供与FCLK(由代码配置的系统时钟)相同的时钟。 调用库函数:DBGMCU_Config(DBGMCU_SLEEP, ENABLE);即可 (2)在停机模式下,调试器必须先置位DBG_STOP位。这将激活内部RC振荡器,在停止模式下为FCLK和HCLK提供时钟。 调用库函数:DBGMCU_Config(DBGMCU_STOP, ENABLE);即可 |
|
|
|
|
|
30.4 如何有效降低睡眠模式下的功耗
设计低功耗主要从以下几方面着手: 1、关闭可以关闭的外设时钟。 2、降低系统主频。 3、注意I/O的状态,因为睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 (1)如果此I/O口带上拉,请设置为高电平输出或者高阻态输入。 (2)如果此I/O口带下拉,请设置为低电平输出或者高阻态输入。 4、注意I/O和外设IC的连接。 5、测试低功耗的时候,一定不要连接调试器,更不能边调试边测电流。 |
|
|
|
|
|
30.5 总结
本章节主要为大家讲解了STM32低功耗之睡眠模式,学习了本章节内容后,可为第33章FreeRTOS的低功耗模式tickless的学习打下基础。 |
|
|
|
|
|
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12009 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:19 , Processed in 0.611627 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号