1.前言
工作之后接触了“低功耗”,开始搜索各种各样的低功耗MCU。网络是一个非常自由的地方,你总可以看到各种关于哪个MCU功耗更低的论战,在这些论战中我查阅了几乎所有低功耗MCU的特性,例如MSP430、EFM32还有STM32L等,网络论战的核心便是哪款MCU的休眠电流更低。看多了资料我便发现,这些低功耗的MCU如何使用,低功耗MCU的程序编写和普通MCU编程有什么区别。
带着这些疑问我继续品味关于低功耗MCU的”论战“,直到我购买了《MSP430系列单片机系统工程设计与实践》。在该书中提到了低功耗MCU编程的基本思想,大致可以总结为:
1.善用节拍
2.消除阻塞
下面就结合STM8谈谈如何实践以上两点。(虽然STM8并不是严格意义上的低功耗MCU,但是只要有低功耗指令的MCU都可以使用以上两点,发挥它的低功耗特性)
2.善用节拍
定时休眠是低功耗MCU常用的手段,定时休眠便是让MCU先休眠再工作,在休眠和工作之间不停转换。STM8有多种低功耗方式,例如等待模式便是其中的一种,等待模式时仅MCU停止工作,其他外设可正常工作。使用等待模式可以保证定时器或UART等可以正常的进入中断。当然也可以使用停止模式进一步降低功耗,在这里则使用等待模式做一个“方法性质”的说明。
图1 前后台系统中的低功耗节拍
可以这样理解,定时进入低功耗模式也可以理解为一个任务,这个“任务”会阻塞CPU使得其他任务无法得到运行,但这并不是真正意义的阻塞CPU,而是使得CPU停止只能通过定时器中断才可以退出该”任务“。实现部分的代码如下:
void main(void)
{
/* Clock configuration -----------------------------------------*/
CLK_Config();
/* GPIO configuration -----------------------------------------*/
GPIO_Config();
/* TIM4 configuration -----------------------------------------*/
TIM4_Config();
while (1)
{
// 进入等待模式,CPU停止工作,所有中断打开
Enter_WaitMode();
// LED闪烁任务
LED_Process();
}
}
void Enter_WaitMode(void)
{
WaitFlag = 0;
// 1ms之后CPU被TIM4中断唤醒,WaitFlag在中断中被置位
while( WaitFlag == 0)
{
__wait_for_interrupt();
}
}
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
WaitFlag = 1;
/* Cleat Interrupt Pending bit */
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}
以上代码中出现了WaitFlag标志位,该标志位出现在Enter_WaitMode函数和TIM4_UPD_OVF_IRQHandler中断中,该标志位的作用是保证唤醒CPU继续工作的一定是定时器4溢出中断,其他中断例如UART接收中断则不能使CPU重新运行。STM8的等待模式和定时器4溢出中断组成了低功耗节拍”任务“。
3.消除阻塞
从上文的分析可以看出,在整个的运行周期中总是希望低功耗任务所占的比重大(从时间角度切入),其他任务所占的比重小。那么其他任务应该尽量减少对CPU的占用,例如实现LED间隔闪烁便可使用以下代码:
void LED_Process(void)
{
static uint16_t LEDCounter = 0;
if( LEDCounter++ > 500 )
{
LEDCounter = 0;
/* Toggles LEDs */
GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
}
}
由于LED_Process在低功耗任务之后运行,而低功耗任务所占用CPU的时间为固定时间——定时器4溢出周期,也就意味着LED任务的调用周期为1ms,利用该特性可以结合一个计数变量LEDCounter实现LED闪烁功能,当然更复杂的时序可以通过有限状态机实现。
4.总结
节拍运行和消除阻塞算是低功耗MCU编程的基本思想,理解了低功耗MCU编程的基本思路那么不是低功耗的MCU也可以用来开发出低功耗应用。前段时间上TB查看MCU的价格,STM8的价格真的把我吓了一跳,自己也购置了STM8开发板,结合低功耗方法于是总结了该文章。
若结合操作系统实现低功耗,请参考以下博文:
未来的安排——尝试一下STM8和SI4432如何!
分享到:
相关推荐
音乐推荐系统后台PHP-CI —— 毕设 音乐推荐系统后台PHP-CI —— 毕设 音乐推荐系统后台PHP-CI —— 毕设 音乐推荐系统后台PHP-CI —— 毕设 音乐推荐系统后台PHP-CI —— 毕设 音乐推荐系统后台PHP-CI —— 毕设 ...
固定资产管理系统Java版-附后台源码和移动端源码和(Java版)图书管理系统-附前后台源码(csdn)————程
电商系统前后台解析——店铺装修方法论 .doc
后台管理系统css——《后台管理系统》同款
微信小程序——移动小商城:基于node,包含前后台(截图+源码).zip 微信小程序——移动小商城:基于node,包含前后台(截图+源码).zip 微信小程序——移动小商城:基于node,包含前后台(截图+源码).zip 微信小...
相当给力的模板。前台后台样样俱全。碉堡了
JAVA 论文格式化系统_——后台模块的设计与实现.docxJAVA 论文格式化系统_——后台模块的设计与实现.docxJAVA 论文格式化系统_——后台模块的设计与实现.docxJAVA 论文格式化系统_——后台模块的设计与实现.docxJAVA...
管理员通过MySQL数据库添加管理员操作添加管理员用户,然后管理员通过Web后台网页登录界面进行管理员账号登陆,进入主界面后可以从左侧导航栏选择页面功能,页面功能包含首页信息、用户管理、路灯管理、故障管理...
微信大转盘源码 —— thinkPHP后台 账号admin 密码123456
变电站综合自动化系统SCADA后台机——MoxaV2402嵌入式计算机
—————————————————————————————————————————————————————————————— 2022/04/27日更新三个大屏模板分别为:商场销售数据可视化系统、用户数据监控...
面向MCU的小型前后台系统。此项目的设计思想是:功能模块与硬件高度解耦,提高代码模块的可复用性;不使用复杂的数据结构和语法以提高不同硬件平台和编译器之间的兼容性,实现工程在不同MCU之间的快速移植;提供实用...
最新版JavaWeb综合案例——品牌后台管理系统 来源:改编自黑马程序员最新JavaWeb课程案例 所用技术及工具:Mybatis+Maven+Filter+Ajax+JSON+JavaScript+HTML+CSS+Element+VUE
论文格式化系统_——后台模块的设计与实现-JSP编程设计.doc
管理后台——数据后台.xlsx
管理后台——运营后台.xlsx
4.1.2 开发与设计的总体思想 8 4.1.3系统功能设计 9 4.2数据库设计 10 第五章 详细设计 15 5.1家教信息管理系统首页 15 5.2家教注册模块 16 5.3学生注册模块 18 5.4家教信息浏览模块 21 5.5学生信息浏览...
毕业设计是高等教育阶段学生完成学业的一个重要环节,通常在学士或硕士学业即将结束时进行。这是学生将在整个学业中所学知识和技能应用到实际问题上的机会,旨在检验学生是否能够独立思考、解决问题,并展示其专业...
客户关系管理系统后台设计——毕业设计论文.doc