STM32 μC/OS系统进睡眠模式的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 μC/OS系统进睡眠模式的方法相关的知识,希望对你有一定的参考价值。
本文版权:成都至诚恒远物联网技术有限公司
网址: www.heryit.cn
联系电话: 028-87657875 13060063607
前段时间做基于μC/OS系统的开发,遇到一个问题,在运行任务的时候需要使CPU进入睡眠状态几秒钟,但直接调用__WFI();时没有效果,后来查找资料发现需要在空闲任务中调用。
下面是我让cpu进入睡眠状态的例子:
void App_TaskIdleHook (void) {
//检查标志确定是否需要睡眠 if(Flag_Power_Off != 0) {
//关闭systick避免systick中断唤醒CPU SYSTICK_Cmd(DISABLE); Flag_Power_Off = 0; printf("sleep\r\n"); CLKPWR_Sleep(); printf("wake\r\n"); //恢复所有挂起的任务 OSTaskResume(10); OSTaskResume(11); OSTaskResume(12); OSTaskResume(13);
//使能systick恢复任务调度 SYSTICK_Cmd(ENABLE); } }
打开μC/OS的OS_APP_HOOKS_EN,在需要睡眠的地方加上下面的代码就可以进入睡眠状态了:
//设置定时器,定时进入中断唤醒CPU
//之前需要关闭除定时器以外的全部中断
//设置标志,需要进入睡眠状态
Flag_Power_Off = 0x01; //挂起所有任务(保证CPU立即运行到空闲任务中) OSTaskSuspend(10); OSTaskSuspend(11); OSTaskSuspend(12); OSTaskSuspend(13);
注:在进入睡眠状态之前要用定时器设定唤醒时间并关闭除此定时器外的所有中断,我在进入空闲任务之前关掉了除systick外的中断,否则不能调度任务进入空闲任务,然后在空闲任务中关闭systick,睡眠完成之后再打开systick中断。
以上是关于STM32 μC/OS系统进睡眠模式的方法的主要内容,如果未能解决你的问题,请参考以下文章