23.3.2 STM32F407开发板实验 配套例子: V5-423_RTX实验_低功耗(待机模式) 实验目的: 1. 学习RTX实验低功耗(待机模式)。 实验内容: 1. K1按键按下,串口打印。 2. K2键按下,直接发送信号量同步信号给任务AppTaskMsgPro,任务AppTaskMsgPro接收到消息后进行消息处理。 3. K2按键还有一个功能是将系统从待机模式唤醒,唤醒方式是用过K2按键对应的引脚PC13检测RTC的入侵事件。 4. K3按键按下,系统进入到待机模式。 5. 各个任务实现的功能如下: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,等待任务AppTaskUserIF发来的信号量同步信号。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 6. 关于低功耗的说明: (1) 待机模式可实现系统的最低功耗。该模式是在Cortex-M4F深睡眠模式时关闭电压调节器整个1.2V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。 (2) 从待机模式唤醒后的代码执行等同于复位后的执行。 7. 实际项目中推荐采用官方的tickless模式。 设计低功耗主要从以下几个方面着手: 1. 用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式可以使用的低功耗方式有休眠模式,待机模式,停机模式。 2. 选择了低功耗方式后就是关闭可以关闭的外设时钟。 3. 降低系统主频。 4. 注意I/O的状态。 如果此I/O口带上拉,请设置为高电平输出或者高阻态输入; 如果此I/O口带下拉,请设置为低电平输出或者高阻态输入; a.在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。 b.在停机模式下,所有的I/O引脚都保持它们在运行模式时的状态。 c.在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚: ● 复位引脚(仍可用)。 ● RTC_AF1 引脚 (PC13)(如果针对入侵、时间戳、 RTC 闹钟输出或 RTC 时钟校准输出进行了配置)。 ● WKUP 引脚 (PA0)(如果使能)。 5.注意I/O和外设IC的连接。 6.测低功耗的时候,一定不要连接调试器,更不能边调试边测电流。 RTX配置: RTX配置向导详情如下: Task Configuration Number of concurrent running tasks 允许创建4个任务,实际创建了如下四个任务: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,等待任务AppTaskUserIF发来的消息邮箱数据。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 Number of tasks with user-provided stack 创建的4个任务都是采用自定义堆栈方式。 RTX任务调试信息: 程序设计: 任务栈大小分配: staticuint64_t AppTaskUserIFStk[512/8]; /* 任务栈 */ staticuint64_t AppTaskLEDStk[256/8]; /* 任务栈 */ staticuint64_t AppTaskMsgProStk[512/8]; /* 任务栈 */ staticuint64_t AppTaskStartStk[512/8]; /* 任务栈 */ 将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐的含义就是数组的首地址对8求余等于0。如果不做8字节对齐的话,部分C语言库函数,浮点运算和uint64_t类型数据运算会出问题。 系统栈大小分配:
|