RTOS-F429-HAL-TICKLESS低功耗(2026/8/5)
目录一STM32低功耗模式11.2V 域 vs VDD 域 vs 调压器2三种低功耗模式本质3一张图解释停机和待机4正点例程采用睡眠模式二实验分析1正点实验内容2用到的几个宏三实验改动rtos\22\ 改动清单freertos_demo.cFreeRTOSConfig.hmain.c钩子函数运行逻辑总结一STM32低功耗模式模式名称进入唤醒对 1.2V 域时钟的影响对 VDD 域时钟的影响调压器睡眠(立即休眠或退出是休眠)WFI任意中断CPU CLK 关闭对其它时钟或模拟时钟源无影响无开启WFE唤醒事件停止PDDS 和 LPDS 位 SLEEPDEEP 位WFI 或 WFE任意 EXTI 线(在 EXTI 寄存器中配置内部线和外部线)所有 1.2 V 域时钟都关闭HSI 和 HSE 振荡器关闭开启或处于低功耗模式待机PDDS 位 SLEEPDEEP 位WFI 或 WFEWKUP 引脚上升沿、RTC 闹钟(闹钟 A 或闹钟 B)、RTC 唤醒事件、RTC 入侵事件、RTC 时间戳事件、NRST 引脚外部复位、IWDG 复位所有 1.2 V 域时钟都关闭HSI 和 HSE 振荡器关闭关闭11.2V 域 vs VDD 域 vs 调压器芯片供电秘密F429 外接 3.3VVDD但 Cortex-M4 核心实际跑在1.2V。芯片内部有个调压器把 3.3V → 1.2V外部 3.3V (VDD) │ ├──────────────────────────→ 直接给 GPIO、USART、SPI、RTC 备份域 │ ↑ 这部分就是 VDD 域 │ └──→ 调压器 → 1.2V ──→ CPU、NVIC、SRAM、Flash、DMA、大部分外设 ↑ 这部分就是 1.2V 域2三种低功耗模式本质睡眠停止待机CPU 钟关关关1.2V 域外设、SRAM开着全关全关VDD 域GPIO、RTC开着开着开着调压器开着开着/半开关唤醒后原地继续程序从头跑但 SRAM 还在程序从头跑SRAM 全丢3一张图解释停机和待机睡眠模式CPU 打盹店还开着 拉下卷帘门WFI→ CPU 不干活了 但店里的灯外设时钟、收银机SRAM全开着 有人敲门任意中断→ 门一拉就起来 → 瞬间恢复 ​ 停止模式打烊但不锁门 灯关了1.2V 域时钟全关包括外设、CPU 收银机还通着电调压器还在SRAM 保持 只有应急灯亮着VDD 域——GPIO 能检测电平变化 外部中断、RTC 闹钟 → 重新开灯 → 程序接着跑 ​ 待机模式彻底断电只留一把钥匙 整店断电调压器关了 → 1.2V 域没了 → SRAM 全丢 唯一的唤醒方式WKUP 引脚、RTC 闹钟、复位 醒了 重新开店程序从 main 重新开始跟复位一样低功耗 Tickless 就是用停止/待机模式FreeRTOS 没有任务要跑的时候不跑 SysTick 空转直接把芯片塞进低功耗模式RTC 闹钟到了再叫醒。4正点例程采用睡眠模式睡眠模式CPU 停了但外设和 SysTick 还活着——一个定时器中断立马能叫醒程序原地继续什么状态都不丢。实验做起来简单改个配置就行。停止/待机模式醒了程序要从头跑或者重新初始化所有外设——FreeRTOS 状态全丢恢复起来复杂度高一截。教学中一般不碰这两个。正点的 Tickless 实验就是开了configUSE_TICKLESS_IDLEIdle 任务在没有 Run 的时候不空转 SysTick而是调WFI让 CPU 睡觉。SysTick 到点或者外部中断来了自动醒。代码很简单——改几个宏配一个恢复函数。二实验分析1正点实验内容代码完全复用二值信号量实验只是多开了configUSE_TICKLESS_IDLE 1和两个钩子// 进 WFI 前关掉不用 GPIO 的时钟省电 void PRE_SLEEP_PROCESSING(void) { __HAL_RCC_GPIOA_CLK_DISABLE(); // 全关 __HAL_RCC_GPIOB_CLK_DISABLE(); ... } ​ // WFI 醒来重新打开 void POST_SLEEP_PROCESSING(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 全开 ... }运行时流程task1 扫键10ms 醒一次 task2 死等信号量永远睡着 没有任务要跑时 → Idle 跑 → 算下次谁要醒 → WFI 睡觉 → 省电 ​ ↓ 到点了或中断来了 ​ POST_SLEEP_PROCESSING → 恢复 GPIO 时钟 → 调度器继续跑2用到的几个宏宏作用不改行不行configUSE_TICKLESS_IDLE 1总开关必须改configEXPECTED_IDLE_TIME_BEFORE_SLEEP空闲时间 这个值就不进 WFI防止刚睡就被叫醒进出开销比省的电还大✅ 默认 2 tick不改也行configPRE_SLEEP_PROCESSING进 WFI 前要执行的操作✅ 默认空我们没在宏里写直接用弱函数PRE_SLEEP_PROCESSING()替代了configPOST_SLEEP_PROCESSING出 WFI 后要执行的操作✅ 同上正点 PPT 把四个宏全介绍了是讲原理——告诉你 Tickless 有这些可配置的点。实际动手时configUSE_TICKLESS_IDLE 1一开另外三个要么有默认值、要么我们已经用弱函数实现了不需要额外改。三实验改动rtos\22\ 改动清单freertos_demo.c行号内容54-82PRE_SLEEP_PROCESSINGPOST_SLEEP_PROCESSING— 睡前关 7 个 GPIO 时钟醒后开回来102-137二值信号量 两个任务复用 rtos\11\ 逻辑FreeRTOSConfig.h行号内容46configUSE_TICKLESS_IDLE0→1main.c行号内容26printf 标题 →FreeRTOS Tickless Test!Tickless 没有用户 API——只改一个宏 两个钩子业务代码完全不变。可以编译烧录了。钩子函数void PRE_SLEEP_PROCESSING(void) // 钩子1睡前被 FreeRTOS 调用 → 关 GPIO 时钟 { __HAL_RCC_GPIOA_CLK_DISABLE(); ... } ​ void POST_SLEEP_PROCESSING(void) // 钩子2醒后被 FreeRTOS 调用 → 开回 GPIO 时钟 { __HAL_RCC_GPIOA_CLK_ENABLE(); ... }钩子 FreeRTOS 在 Idle 任务里 WFI 的前后给你留的空位。你不写这两个函数 → WFI 照常工作但 GPIO 时钟还开着 → 省电效果打折扣。你写了 → 睡前关掉、醒后开回 → 省更多电。运行逻辑总结正常运行时 task1每 10ms 醒一次扫按键 task2死等信号量阻塞 ​ 没有任务跑的时候 CPU 不是傻等 SysTick → 是进 Idle 任务 → 调 PRE_SLEEP → WFI 睡觉 → 等中断叫醒你什么键都不按的时候系统大部分时间在 WFI 里睡觉电流比普通 RTOS 低很多。正点的实验逻辑就是这么简单——用之前的二值信号量实验直接套上 Tickless 的开关。实验现象就是原例程输出给你对比的二值信号量创建成功 信号量释放成功 获取信号量成功 ← 按 KEY0 触发一次 信号量释放成功 获取信号量成功 ← 按 KEY1 触发一次功能一模一样只是不按键的时候 CPU 在睡觉省电。

相关新闻

泰坦尼克号生存预测:从数据清洗到模型集成的完整机器学习实战

泰坦尼克号生存预测:从数据清洗到模型集成的完整机器学习实战

1. 项目概述:从数据中打捞历史“泰坦尼克号乘客生存情况预测分析”,这个项目标题在数据科学和机器学习的学习圈里,几乎是一个图腾般的存在。我第一次接触它,还是在多年前刚入门的时候,当时觉得这不就是个简单的分类问题…

2026/10/9 4:05:53 阅读更多 →
天赐范式第126天:“我被逻辑所思故我在“与哥德尔智能体的趋同共振

天赐范式第126天:“我被逻辑所思故我在“与哥德尔智能体的趋同共振

天赐范式第126天:"我被逻辑所思故我在"与哥德尔智能体的趋同共振副标题:同一座地基上的两座建筑——工程与哲学在"自指"处的相遇📌 本文是天赐范式系列第126天,前置阅读:第125天双篇《大模型自指的…

2026/10/15 9:37:33 阅读更多 →
AReaL智能体训练系统:从强化学习到自主进化的实战指南

AReaL智能体训练系统:从强化学习到自主进化的实战指南

1. 从“指令执行”到“自主进化”:AReaL 如何重塑智能体学习范式最近在折腾各种开源智能体框架时,我总感觉缺了点什么。无论是基于LLM的指令跟随,还是预设好的工作流,智能体们表现得都像是一个个“听话但死板”的实习生——你告诉…

2026/10/2 12:46:31 阅读更多 →

最新新闻

C++ libcurl工业级实战:断点续传、进度回调与SSL证书校验

C++ libcurl工业级实战:断点续传、进度回调与SSL证书校验

简介:本资源是一套面向C中高级开发者与跨平台网络编程学习者的实战项目包,聚焦libcurl在HTTP文件上传与下载场景下的工程化应用,并配套Node.js服务端用于端到端功能验证。资源共872个文件,涵盖227个JavaScript服务端逻辑文件、128…

2026/10/17 8:49:26 阅读更多 →
artcraft:融合数字艺术与手工工艺的创作实践指南

artcraft:融合数字艺术与手工工艺的创作实践指南

1. 项目定位与创作思路拆解1.1 “artcraft”到底要做什么“artcraft”这个名字,我第一次看到时就觉得挺有意思:前半段是 art(艺术),后半段是 craft(工艺、手艺)。很多人把它理解成“艺术手作”&…

2026/10/17 8:49:26 阅读更多 →
Flutter Sliver 固定头布局:SliverPersistentHeader 与 SliverToBoxAdapter 实战

Flutter Sliver 固定头布局:SliverPersistentHeader 与 SliverToBoxAdapter 实战

在 Flutter 的滚动体系里,Sliver 家族算是把“灵活”两个字玩到极致的一层。很多人第一次接触 CustomScrollView 的时候,看到一堆 Sliver 前缀的组件会本能地犯怵,觉得这玩意儿比 ListView 复杂太多。但真正在项目里做过复杂头部交互的人都知…

2026/10/17 8:49:26 阅读更多 →
OSPF区域外路由计算:FA值与Type-4/5 LSA深度解析

OSPF区域外路由计算:FA值与Type-4/5 LSA深度解析

1. 从一个让人抓头的现象说起如果你平时维护过企业内网或者数据中心的网络,大概率遇到过这种场景:明明路由表里看到了一条外部路由,下一跳也正确,但数据包就是不通。抓包一看,流量被丢到了错误的出口,或者干…

2026/10/17 8:49:26 阅读更多 →
图表即代码:diagram-design让架构图像代码一样可维护、评审、复用

图表即代码:diagram-design让架构图像代码一样可维护、评审、复用

写这套图表脚本,我前后重构了三次,中间推翻过两版,才找到一套真正能扛住真实业务压力的结构。如果你也在用手拖拽画架构图、时序图,画完发现版本对不上、变更查不到、图形风格全靠个人手感,那这篇东西应该对你有用。这…

2026/10/17 8:49:26 阅读更多 →
GLA与KDA对比:门控线性注意力与Delta规则的长文本建模实战

GLA与KDA对比:门控线性注意力与Delta规则的长文本建模实战

聊到长文本建模,GLA(Gated Linear Attention,门控线性注意力)和KDA(KimiDeltaAttention,一类基于Delta规则的线性注意力变体)是我最近被问得最多的两个名字。如果你一直在用标准Softmax注意力&a…

2026/10/17 8:48:26 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →