低功耗管理的概念
低功耗管理
STM32低功耗设计详解
STM32电源管理系统
STM32低功耗模式
睡眠模式: 在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,CM4核心的外设全都还照常运行。
有两种方式进入睡眠模式,它的进入方式决定了从睡眠唤醒的方式,分别是WFI(wait for interrupt)和WFE(wait for event),即由等待“中断”唤醒和由“事件”唤醒。睡眠模式的各种特性见下表
停止模式: 在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其1.2V区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息。
所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。停止模式可以由任意一个外部中断(EXTI)唤醒。在停止模式中可以选择电压调节器为开模式或低功耗模式,可选择内部FLASH工作在正常模式或掉电模式。
待机模式:待机模式,它除了关闭所有的时钟,还把1.2V区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测boot条件,从头开始执行程序。它有四种唤醒方式,分别是WKUP(PA0)引脚的上升沿,RTC闹钟事件,NRST引脚的复位和IWDG(独立看门狗)复位。
Tickless低功耗模式
FreeRTOS低功耗模式配置
FreeRTOS低功耗模式应用
配置:
低功耗硬件设计
电源管理
外设模块
外部接口
低功耗实现原理代码分析
空闲任务详解
/*
空闲任务
*/
static portTASK_FUNCTION( prvIdleTask, pvParameters )
{
/* Stop warnings. */
( void ) pvParameters;
/** THIS IS THE RTOS IDLE TASK - WHICH IS CREATED AUTOMATICALLY WHEN THE
SCHEDULER IS STARTED. **/
for( ;; )
{
/*检查任务删除自身处理 */
prvCheckTasksWaitingTermination();
/*判断调度器工作模式是否开启了优先级抢占模式*/
#if ( configUSE_PREEMPTION == 0 )
{
/*
1、触发了上下文切换
2、让调度器判断是否有其他任务,处于了就绪态,然后进行调度
*/
taskYIELD();
}
#endif /* configUSE_PREEMPTION */
//调度器使能抢占式
#if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) )
{
/*
1、和空闲任务处于同一优先级的任务,处于就绪态
2、进行上下文切换
3、高于空闲任务优先级的任务,有调度器进行处理
*/
if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
{
taskYIELD();
}
else
{
mtCOVERAGE_TEST_MARKER();
}
}
#endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) */
/*
钩子函数,主要让用户自己填充代码
*/
#if ( configUSE_IDLE_HOOK == 1 )
{
extern void vApplicationIdleHook( void )