当前位置: 首页 > article >正文

STM32F103C8T6延时函数选型指南:空循环、SysTick、TIM3到底用哪个?

STM32F103C8T6延时函数选型指南空循环、SysTick、TIM3到底用哪个在嵌入式开发中延时函数的选择往往被忽视但它直接影响着系统的实时性、功耗和代码效率。面对STM32F103C8T6这颗经典的Cortex-M3内核MCU开发者通常会在空循环、SysTick和TIM3三种延时方案中纠结。本文将深入分析这三种方法的适用场景帮助你根据项目需求做出最优选择。1. 理解延时函数的核心指标选择延时函数前我们需要明确几个关键评估维度精度延时与实际需求的偏差范围通常以微秒(μs)或毫秒(ms)衡量CPU占用率延时期间CPU是否能处理其他任务功耗影响不同延时方式对系统功耗的差异代码复杂度实现所需的技术门槛和维护成本精度与CPU占用的权衡是嵌入式开发者永恒的课题。高精度往往意味着更高的硬件资源占用而低功耗设计又可能牺牲实时性。理解这些指标的相互制约关系是做出明智选择的基础。2. 空循环延时简单但代价高昂空循环是最直接的软件延时方式通过让CPU执行无意义的计数循环来实现延时。典型的实现如下// 微秒级延时基于72MHz主频估算 void delay_us(uint16_t time) { uint16_t i 0; while(time--) { i 10; while(i--); } } // 毫秒级延时 void delay_ms(uint16_t time) { uint16_t i 0; while(time--) { i 12000; while(i--); } }2.1 适用场景分析空循环延时的核心优势在于无需硬件初始化即写即用代码极其简单适合快速原型开发不占用额外硬件资源定时器但它的致命缺陷也很明显精度随系统时钟变化波动大100%占用CPU周期无法执行其他任务功耗最高CPU持续全速运行提示空循环延时在调试LED闪烁等简单场景可能够用但在实际产品中应尽量避免。2.2 优化技巧如果必须使用空循环可以考虑以下改进使用__NOP()内联函数替代空循环提高可移植性通过校准确定循环次数与实际延时的关系结合编译器优化选项调整如-O0禁用优化3. SysTick延时内核级的优雅方案SysTick是Cortex-M内核提供的24位系统定时器专为操作系统心跳设计但也可用于精确延时。典型配置如下// 初始化SysTick72MHz主频1μs分辨率 void delay_init(void) { // 选择处理器时钟作为源不8分频 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); SystemCoreClockUpdate(); } // 微秒级延时 void delay_us(uint32_t nus) { uint32_t temp; SysTick-LOAD nus * (SystemCoreClock / 1000000) - 1; SysTick-VAL 0x00; SysTick-CTRL | SysTick_CTRL_ENABLE_Msk; do { temp SysTick-CTRL; } while((temp 0x01) !(temp (116))); SysTick-CTRL ~SysTick_CTRL_ENABLE_Msk; }3.1 性能特点SysTick方案在多个维度表现出色指标表现精度±1μs72MHz时CPU占用忙等待期间100%功耗中等代码复杂度中等独特优势不占用外设定时器资源跨Cortex-M平台可移植性强与RTOS天然兼容3.2 实际应用建议SysTick特别适合以下场景需要中等精度延时的裸机应用未来可能移植到RTOS的项目定时器资源紧张时的替代方案注意SysTick的24位计数器限制最大延时约186ms72MHz时更长延时需要软件级联实现。4. TIM3硬件延时精准控制的专业之选通用定时器如TIM3提供的硬件延时是专业项目的首选。完整实现包括// TIM3初始化72MHz1μs分辨率 void TIM3_Init(void) { TIM_TimeBaseInitTypeDef TIM_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_InitStruct.TIM_Period 0xFFFF-1; // 最大重载值 TIM_InitStruct.TIM_Prescaler 72-1; // 72MHz/72 1MHz TIM_InitStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_InitStruct.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3, TIM_InitStruct); } // 微秒级延时 void TIM3_Delayus(uint16_t us) { TIM_Cmd(TIM3, ENABLE); TIM_SetCounter(TIM3, 0); while(TIM_GetCounter(TIM3) us); TIM_Cmd(TIM3, DISABLE); }4.1 关键优势解析TIM3方案在专业项目中备受青睐的原因超高精度硬件计时不受指令流水线影响低CPU开销可结合中断实现非阻塞延时灵活扩展同一定时器可复用为PWM、输入捕获等功能低功耗潜力配合休眠模式实现能效优化4.2 进阶应用技巧中断驱动实现volatile uint32_t tim3_delay_done 0; void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3, TIM_IT_Update)) { tim3_delay_done 1; TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } } void TIM3_Delayus_IT(uint16_t us) { tim3_delay_done 0; TIM_SetAutoreload(TIM3, us-1); TIM_SetCounter(TIM3, 0); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); TIM_Cmd(TIM3, ENABLE); while(!tim3_delay_done); TIM_Cmd(TIM3, DISABLE); }低功耗优化void TIM3_Delayus_LP(uint16_t us) { TIM_SetAutoreload(TIM3, us-1); TIM_SetCounter(TIM3, 0); TIM_Cmd(TIM3, ENABLE); PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI); TIM_Cmd(TIM3, DISABLE); }5. 决策流程图与场景匹配根据项目需求选择延时方案可参考以下决策树是否要求极简实现是 → 选择空循环否 → 进入下一步是否需要RTOS兼容是 → 选择SysTick否 → 进入下一步是否要求最高精度或低功耗是 → 选择TIM3否 → 选择SysTick典型场景匹配表应用场景推荐方案理由LED调试闪烁空循环实现简单精度要求低传感器数据采集SysTick中等精度避免定时器资源冲突电机PWM控制TIM3高精度需求硬件同步电池供电设备TIM3可配合休眠模式降低功耗多任务系统SysTick与调度器天然集成在资源受限的STM32F103C8T6上TIM3的灵活性和TIM1/TIM2等高级定时器相当但占用资源更少。一个实际项目中的经验法则是优先保留TIM1/TIM2用于PWM生成等高级功能将TIM3/TIM4分配给时间关键型延时任务。

相关文章:

STM32F103C8T6延时函数选型指南:空循环、SysTick、TIM3到底用哪个?

STM32F103C8T6延时函数选型指南:空循环、SysTick、TIM3到底用哪个? 在嵌入式开发中,延时函数的选择往往被忽视,但它直接影响着系统的实时性、功耗和代码效率。面对STM32F103C8T6这颗经典的Cortex-M3内核MCU,开发者通常…...

3分钟掌握Tab-Resize:浏览器分屏布局终极指南

3分钟掌握Tab-Resize:浏览器分屏布局终极指南 【免费下载链接】tab-resize Split Screen made easy. Resize the CURRENT tab and tabs to the RIGHT into layouts on separate Windows. w/ Multi-monitor Support 项目地址: https://gitcode.com/gh_mirrors/ta/t…...

AI教材写作新利器!低查重AI写教材,快速生成高质量教材!

AI教材编写工具介绍 在撰写教材的过程中,选择合适的工具常常让人感到烦恼,仿佛置身于一场“纠结大会”。使用普通的办公软件,总是觉得功能太过局限,框架的搭建和格式的调整都得靠手动来完成;而如果尝试更专业的AI教材…...

coze-loop真实案例:从算法逻辑到数据处理,AI优化全过程解析

coze-loop真实案例:从算法逻辑到数据处理,AI优化全过程解析 1. 项目背景与核心价值 在软件开发过程中,代码优化是一个既重要又具有挑战性的环节。传统优化方式往往需要开发者具备深厚的算法功底和丰富的经验积累,而coze-loop的出…...

解决痛点:用Fish Speech 1.5让长时间运行的爬虫“开口说话”

解决痛点:用Fish Speech 1.5让长时间运行的爬虫"开口说话" 1. 爬虫开发者的痛点 长时间运行的爬虫任务往往面临几个典型问题: 监控困难:需要不断查看日志或终端输出,容易错过关键信息反馈延迟:邮件或短信…...

免费开源的Altium电路图转换器:轻松查看SchDoc文件无需专业软件

免费开源的Altium电路图转换器:轻松查看SchDoc文件无需专业软件 【免费下载链接】python-altium Altium schematic format documentation, SVG converter and TK viewer 项目地址: https://gitcode.com/gh_mirrors/py/python-altium 你是否曾经收到过Altium …...

Noto字体终极指南:如何免费获得900+语言支持的完整字体解决方案

Noto字体终极指南:如何免费获得900语言支持的完整字体解决方案 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 想要彻底告别网页和应用中的"豆腐块"乱码问题吗&…...

如何高效去除视频水印:基于LAMA模型的智能修复完整指南

如何高效去除视频水印:基于LAMA模型的智能修复完整指南 【免费下载链接】WatermarkRemover 批量去除视频中位置固定的水印 项目地址: https://gitcode.com/gh_mirrors/wa/WatermarkRemover 还在为视频中顽固的水印而烦恼吗?想要获得纯净无干扰的视…...

LangChain实战进阶(三十七)——RAG性能调优(十三)巧用ReRank压缩器精炼检索结果

1. 为什么需要ReRank压缩器? 做过RAG系统的朋友应该都遇到过这样的问题:用向量数据库检索出来的文档,前几条可能还靠谱,但越往后相关性越差。有时候甚至会出现明明有正确答案,却被淹没在一堆无关文档里的情况。这就好比…...

从一根铜缆到40公里光纤:手把手教你部署QSFP模块的5种典型连接方案

从一根铜缆到40公里光纤:手把手教你部署QSFP模块的5种典型连接方案 在数据中心和高速网络部署中,QSFP模块因其高密度和灵活性成为40G网络的核心组件。但面对不同的传输距离、介质类型和应用场景,如何选择合适的连接方案往往让工程师们头疼。本…...

【银河麒麟高级服务器操作系统】EXT4文件系统只读故障溯源与修复指南

1. 故障现象初探:当磁盘突然变成"哑巴" 那天早上刚到办公室,就接到运维同事的紧急电话:"数据盘突然不能写了!"登录服务器一看,果然/data目录下所有写入操作都报"Read-only file system"…...

3分钟上手跨平台资源嗅探下载神器res-downloader:微信视频号、抖音、QQ音乐一网打尽

3分钟上手跨平台资源嗅探下载神器res-downloader:微信视频号、抖音、QQ音乐一网打尽 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/re…...

RK3568-Android12 绕过APK安装安全提示的两种高效修改方案

1. RK3568-Android12系统APK安装安全机制解析 RK3568作为瑞芯微推出的高性能处理器,在智能终端设备领域应用广泛。搭载Android 12系统的RK3568平台,其APK安装流程相比早期Android版本增加了多重安全验证机制。这些机制虽然提升了系统安全性,但…...

Windows Defender完全移除终极指南:三步解决系统性能问题

Windows Defender完全移除终极指南:三步解决系统性能问题 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/…...

LaTeX技巧:灵活控制图表编号的三种实用方法

1. 为什么需要控制图表编号? 写论文或者技术报告的时候,我们经常会遇到这样的困扰:有些图表需要编号方便引用,有些图表又不需要编号。比如封面图片、装饰性插图,或者附录中的补充材料。这时候如果所有图表都自动编号&a…...

CS231n作业3实战:从零构建Transformer图像描述模型

1. 从零理解Transformer图像描述模型 第一次看到Transformer这个词是在2017年那篇著名的《Attention Is All You Need》论文里。当时我正在做NLP相关的研究,完全没想到这个架构后来会在计算机视觉领域掀起这么大的波澜。现在回想起来,Transformer最吸引我…...

大族打标机 TCP 工具类优先设计 + 追溯打标业务落地

本文按工程实施顺序组织:大族 TCP 客户端工具类源码;追溯打标业务源码;IP、端口、模板名动态配置方案(含建表 SQL)。一、大族打标机 TCP 工具类1.1 协议约定大族打标常见指令(ASCII)&#xff1a…...

Dism++:Windows系统终极优化与维护完整指南

Dism:Windows系统终极优化与维护完整指南 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾经为Windows系统运行缓慢而烦恼?是否因…...

LayerX研究揭露Claude Code重大安全漏洞:CLAUDE.md文件成攻击利器

LayerX研究人员发现,攻击者可利用Claude Code项目中的CLAUDE.md文件轻松绕过安全规则。该漏洞让任何人都能无需编写代码,即可自动化实施SQL注入攻击并窃取用户凭证,将AI编程助手直接武器化。 What I Learned from Anthropic Teams Claude Cod…...

Cursor Pro 无限畅用指南:解锁AI编程工具的全部潜能

Cursor Pro 无限畅用指南:解锁AI编程工具的全部潜能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…...

Navicat连接MySQL8.0失败

使用旧版本Navicat连接8.0版本的MySQL无法连接,报如下错误MySQL 2059 错误的核心原因是:MySQL 8.0 默认使用 caching_sha2_password 认证插件,但旧版数据库客户端不支持该插件,导致无法加载认证方式,连接失败。解决这…...

BugKu靶场渗透测试:那些年我们踩过的坑与避坑指南

BugKu靶场渗透测试:那些年我们踩过的坑与避坑指南 第一次接触BugKu靶场时,我像大多数新手一样,带着满腔热情冲进去,结果被各种隐藏的坑绊得鼻青脸肿。现在回想起来,那些看似简单的漏洞利用,其实都暗藏玄机。…...

Phi-4-mini-reasoning快速部署:7.2GB模型SSD加载速度优化技巧

Phi-4-mini-reasoning快速部署:7.2GB模型SSD加载速度优化技巧 1. 项目概述 Phi-4-mini-reasoning是一款3.8B参数的轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这款模型主打"小参数、强推理、长上下文、低延迟"的特点…...

OpenClaw 2026年4月“六天六更”万字深度解读剖析:从“可信底座”到“智能跃迁”的范式革命

引言:一场惊心动魄的“技术交响曲”2026年4月,对 OpenClaw 而言,绝非一个简单的日历月份,而是一场精心编排、惊心动魄的“技术交响曲”。在短短的六天内(4月7日至4月12日),OpenClaw 连续发布了 …...

K8s 蓝绿发布生产级实战指南(零宕机 + 秒级回滚)

官方文档:https://argo-rollouts.readthedocs.io/en/stable/ 一、核心原理与生产架构 1. 核心原理 蓝环境(Blue) 当前承载 100% 生产流量的稳定旧版本。 绿环境(Green) 部署完成、验证通过的新版本,初始…...

EldenRingSaveCopier:艾尔登法环存档备份与迁移的终极解决方案

EldenRingSaveCopier:艾尔登法环存档备份与迁移的终极解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 在交界地奋战数百小时后,你是否曾因存档损坏或设备更换而面临进度丢失的…...

如何快速上手RVC:10分钟打造专属AI语音模型的终极指南

如何快速上手RVC&#xff1a;10分钟打造专属AI语音模型的终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Convers…...

全文降AI率怎么操作最高效?3款工具分步教程对比

全文降AI率怎么操作最高效&#xff1f;3款工具分步教程对比 全文降AI率这件事&#xff0c;选对工具能省一半的时间和精力。但市面上工具那么多&#xff0c;每个都说自己效果好&#xff0c;你到底该用哪个&#xff1f; 今天我不做虚的对比&#xff0c;直接用同一篇论文在嘎嘎降A…...

IDaaS选型指南:拒绝盲目跟风,教你选出最适合企业的“超级门神”

&#x1f9ed; IDaaS选型指南&#xff1a;拒绝盲目跟风&#xff0c;教你选出最适合企业的“超级门神” 在数字化转型的浪潮中&#xff0c;企业的软件系统越来越多&#xff0c;从内部的ERP、MES、OA&#xff0c;到外部的SaaS应用。账号越开越多&#xff0c;密码越记越乱&#xf…...

PX4多机集群控制:5大技术挑战与分布式解决方案深度解析

PX4多机集群控制&#xff1a;5大技术挑战与分布式解决方案深度解析 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4 Autopilot作为开源自动驾驶系统的领军者&#xff0c;在单机控制领域已建立了…...