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

STM32F103RCT6定时器实战:从基础配置到PWM波形测量

1. STM32F103RCT6定时器基础入门第一次接触STM32的定时器时我完全被各种专业术语搞晕了。什么预分频器、自动重装寄存器、时基单元听起来就像天书一样。但实际用起来才发现定时器就像厨房里的定时闹钟只不过更精确、更灵活。STM32F103RCT6这颗芯片内置了多达11个定时器分为高级定时器(TIM1/TIM8)、通用定时器(TIM2-TIM5)和基本定时器(TIM6/TIM7)。我用个简单的比喻基本定时器就像电子表只能简单计时通用定时器像智能手表能计时还能设置多个闹钟高级定时器则是专业运动手表支持各种复杂功能。最常用的通用定时器TIM2-TIM5都是16位计数器在72MHz主频下通过预分频器(psc)和自动重装寄存器(arr)的配合可以实现从几微秒到几十秒的精确定时。比如要实现1秒定时可以这样配置htim2.Instance TIM2; htim2.Init.Prescaler 7199; // 7200分频 htim2.Init.CounterMode TIM_COUNTERMODE_UP; htim2.Init.Period 9999; // 10000计数 htim2.Init.ClockDivision TIM_CLOCKDIVISION_DIV1;这个配置的计算逻辑很简单(71991)/72MHz × (99991) 1秒。我刚开始总记不住要加1结果定时总是不准后来发现手册上明确写着寄存器值实际分频数-1。定时器最基础的功能就是定时中断。配置好后只需要在中断回调函数里处理业务逻辑就行void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim htim2) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // LED闪烁 } }2. PWM波形生成实战PWM脉冲宽度调制绝对是定时器最酷的应用之一。我第一次用PWM做呼吸灯时看着LED慢慢变亮又变暗那种成就感至今难忘。PWM本质上就是通过快速开关来控制平均电压占空比越大等效电压越高。在STM32上配置PWM只需要三步初始化定时器基础参数时钟、计数模式等配置PWM特定参数通道、极性、占空比等启动PWM输出以TIM1的通道1为例TIM_OC_InitTypeDef sConfigOC {0}; sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 500; // 初始占空比50%ARR999 sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1);做呼吸灯效果时我最初直接用HAL_Delay来改变占空比结果发现灯光变化很不平滑。后来改用定时器中断来更新占空比效果立马不一样// 在定时器中断中 static uint16_t pwmVal 0; static int8_t dir 1; if(dir 0) { pwmVal 10; if(pwmVal 1000) dir -1; } else { pwmVal - 10; if(pwmVal 0) dir 1; } __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, pwmVal);PWM应用中有几个实用技巧高级定时器的互补输出功能特别适合驱动电机通过修改ARR值可以快速改变PWM频率使用DMA可以无需CPU干预实现复杂PWM序列3. PWM波形测量技巧测量PWM的频率和占空比是我做过最有趣的实验。STM32的输入捕获功能就像个专业示波器可以精确测量脉冲参数。我推荐使用PWMI模式PWM输入模式它能同时捕获周期和占空比。配置步骤稍微复杂些选择一个通道捕获上升沿测量周期另一个通道捕获下降沿测量脉宽配置定时器为主从模式实现自动复位关键配置代码TIM_SlaveConfigTypeDef sSlaveConfig {0}; sSlaveConfig.SlaveMode TIM_SLAVEMODE_RESET; sSlaveConfig.InputTrigger TIM_TS_TI1FP1; HAL_TIM_SlaveConfigSynchro(htim3, sSlaveConfig); TIM_IC_InitTypeDef sConfigIC {0}; sConfigIC.ICPolarity TIM_ICPOLARITY_RISING; sConfigIC.ICSelection TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler TIM_ICPSC_DIV1; sConfigIC.ICFilter 0; HAL_TIM_IC_ConfigChannel(htim3, sConfigIC, TIM_CHANNEL_1); sConfigIC.ICPolarity TIM_ICPOLARITY_FALLING; sConfigIC.ICSelection TIM_ICSELECTION_INDIRECTTI; HAL_TIM_IC_ConfigChannel(htim3, sConfigIC, TIM_CHANNEL_2);在中断回调函数中计算频率和占空比void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { static uint32_t period 0, pulse 0; if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_1) { period HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); } else if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_2) { pulse HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); uint32_t freq SystemCoreClock / (htim3.Init.Prescaler1) / period; uint32_t duty pulse * 100 / period; } }实际测量时我遇到过两个坑高频信号测量不准确 - 需要适当降低预分频值占空比接近0%或100%时异常 - 需要增加滤波参数4. 高级定时器应用TIM1和TIM8这两个高级定时器简直就是瑞士军刀功能强大到令人发指。我最喜欢用它们做三相PWM控制驱动无刷电机特别方便。互补输出是高级定时器的杀手锏功能。配置死区时间可以防止H桥上下管直通TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig {0}; sBreakDeadTimeConfig.OffStateRunMode TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime 100; // 死区时间 sBreakDeadTimeConfig.BreakState TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.AutomaticOutput TIM_AUTOMATICOUTPUT_DISABLE; HAL_TIMEx_ConfigBreakDeadTime(htim1, sBreakDeadTimeConfig);定时器联动的应用场景很多比如用TIM2触发TIM3实现同步启动用TIM4的输出比较事件触发TIM5的ADC采样多个定时器级联实现超长定时配置主从定时器的关键代码// 主定时器TIM2配置 TIM_MasterConfigTypeDef sMasterConfig {0}; sMasterConfig.MasterOutputTrigger TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode TIM_MASTERSLAVEMODE_ENABLE; HAL_TIMEx_MasterConfigSynchronization(htim2, sMasterConfig); // 从定时器TIM3配置 TIM_SlaveConfigTypeDef sSlaveConfig {0}; sSlaveConfig.SlaveMode TIM_SLAVEMODE_TRIGGER; sSlaveConfig.InputTrigger TIM_TS_ITR1; // 来自TIM2 HAL_TIM_SlaveConfigSynchronization(htim3, sSlaveConfig);在电机控制项目中我将TIM1配置为中心对齐模式产生的PWM波形对称性更好电机运行更平稳。关键配置是htim1.Init.CounterMode TIM_COUNTERMODE_CENTERALIGNED1; htim1.Init.RepetitionCounter 0;调试高级定时器时一定要善用刹车功能。当检测到过流等故障时可以立即关闭所有输出保护电路安全。这个功能在电机驱动中特别重要。

相关文章:

STM32F103RCT6定时器实战:从基础配置到PWM波形测量

1. STM32F103RCT6定时器基础入门 第一次接触STM32的定时器时,我完全被各种专业术语搞晕了。什么预分频器、自动重装寄存器、时基单元,听起来就像天书一样。但实际用起来才发现,定时器就像厨房里的定时闹钟,只不过更精确、更灵活。…...

3大核心技术破解医学影像分割难题:MedSAM引领3D器官重建新范式

3大核心技术破解医学影像分割难题:MedSAM引领3D器官重建新范式 【免费下载链接】MedSAM Segment Anything in Medical Images 项目地址: https://gitcode.com/gh_mirrors/me/MedSAM 医学影像分割是临床诊断和治疗规划的关键环节,而3D重建技术则为…...

2025届毕业生推荐的六大降重复率助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 维普AIGC检测系统旨在识别学术论文里由人工智能生成的那部分内容,随着AI写作工具…...

Dynamic-Datasource数据源类型注册:SPI配置终极指南

Dynamic-Datasource数据源类型注册:SPI配置终极指南 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource Dynamic…...

3步掌握FanControl:Windows平台最专业的免费风扇控制方案

3步掌握FanControl:Windows平台最专业的免费风扇控制方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

终极IE8兼容性解决方案:jQuery-Knob与excanvas深度集成指南

终极IE8兼容性解决方案:jQuery-Knob与excanvas深度集成指南 【免费下载链接】jQuery-Knob Nice, downward compatible, touchable, jQuery dial 项目地址: https://gitcode.com/gh_mirrors/jq/jQuery-Knob 在现代Web开发中,jQuery-Knob作为一款优…...

Goreman RPC接口完全解析:远程控制进程的终极方案

Goreman RPC接口完全解析:远程控制进程的终极方案 【免费下载链接】goreman foreman clone written in go language 项目地址: https://gitcode.com/gh_mirrors/go/goreman Goreman是一款用Go语言编写的进程管理工具,作为Foreman的克隆版本&#…...

react-native-fetch-blob未来展望:路线图分析与社区贡献指南

react-native-fetch-blob未来展望:路线图分析与社区贡献指南 【免费下载链接】react-native-fetch-blob A project committed to making file access and data transfer easier, efficient for React Native developers. 项目地址: https://gitcode.com/gh_mirror…...

OpCore-Simplify:从硬件适配到配置自动化的Hackintosh技术解析

OpCore-Simplify:从硬件适配到配置自动化的Hackintosh技术解析 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在非苹果硬件上运行macOS的…...

IOSSecuritySuite 最佳实践:避免常见陷阱的7个关键点

IOSSecuritySuite 最佳实践:避免常见陷阱的7个关键点 【免费下载链接】IOSSecuritySuite iOS platform security & anti-tampering Swift library 项目地址: https://gitcode.com/gh_mirrors/io/IOSSecuritySuite 在iOS应用开发中,安全防护是…...

WRKFLW性能优化:如何加速大型矩阵构建和工作流执行?

WRKFLW性能优化:如何加速大型矩阵构建和工作流执行? 【免费下载链接】wrkflw Validate and Run GitHub Actions locally. 项目地址: https://gitcode.com/gh_mirrors/wr/wrkflw WRKFLW是一个强大的GitHub Actions本地验证和运行工具,能…...

Architect.dev性能优化终极技巧:提升Lambda函数响应速度的10个方法

Architect.dev性能优化终极技巧:提升Lambda函数响应速度的10个方法 【免费下载链接】architect The simplest, most powerful way to build a functional web app (fwa) 项目地址: https://gitcode.com/gh_mirrors/ar/architect Architect.dev是一个强大的无…...

AudioLM-PyTorch代码深度解析:架构设计、模块实现与扩展方法

AudioLM-PyTorch代码深度解析:架构设计、模块实现与扩展方法 【免费下载链接】audiolm-pytorch Implementation of AudioLM, a SOTA Language Modeling Approach to Audio Generation out of Google Research, in Pytorch 项目地址: https://gitcode.com/gh_mirro…...

Harpy与App Store提交:为什么审核员看不到更新提示的终极指南

Harpy与App Store提交:为什么审核员看不到更新提示的终极指南 【免费下载链接】Harpy Notify users when a new version of your app is available and prompt them to upgrade. 项目地址: https://gitcode.com/gh_mirrors/ha/Harpy Harpy是一个强大的iOS应用…...

WWDC技术笔记SEO优化策略:让更多开发者发现这个宝藏资源

WWDC技术笔记SEO优化策略:让更多开发者发现这个宝藏资源 【免费下载链接】WWDC You dont have the time to watch all the WWDC session videos yourself? No problem me and many contributors extracted the gist for you 🥳 项目地址: https://git…...

Polyglot配置完全手册:OpenAI Key与Azure TTS服务设置详解

Polyglot配置完全手册:OpenAI Key与Azure TTS服务设置详解 【免费下载链接】polyglot 🤖️ Cross-platform AI language practice app (跨平台AI语言练习应用) 项目地址: https://gitcode.com/gh_mirrors/po/polyglot Poly…...

Jets与CI/CD集成:自动化部署和持续交付的终极指南 [特殊字符]

Jets与CI/CD集成:自动化部署和持续交付的终极指南 🚀 【免费下载链接】jets Ruby on Jets 项目地址: https://gitcode.com/gh_mirrors/je/jets Jets作为一款强大的Ruby无服务器部署服务,为开发者提供了完整的CI/CD集成方案&#xff0c…...

告别模糊代码:用Source Code Pro字体拯救你的编程视力

告别模糊代码:用Source Code Pro字体拯救你的编程视力 【免费下载链接】source-code-pro Monospaced font family for user interface and coding environments 项目地址: https://gitcode.com/gh_mirrors/so/source-code-pro 你是否曾在深夜盯着屏幕&#x…...

深入理解Snaffler规则引擎:如何自定义分类器提升检测效率

深入理解Snaffler规则引擎:如何自定义分类器提升检测效率 【免费下载链接】Snaffler a tool for pentesters to help find delicious candy, by l0ss and Sh3r4 ( Twitter: /mikeloss and /sh3r4_hax ) 项目地址: https://gitcode.com/gh_mirrors/sn/Snaffler …...

Awesome AI for Science社区指南:如何参与贡献和获取最新研究进展

Awesome AI for Science社区指南:如何参与贡献和获取最新研究进展 【免费下载链接】awesome-ai4s AI for Science 论文解读合集(持续更新ing),论文/数据集/教程下载:hyper.ai 项目地址: https://gitcode.com/gh_mirr…...

香港科技大学破解自动驾驶难题:让AI在虚拟暴风雨中学会驾驶

当你在雨夜开车时,雨滴敲打挡风玻璃,雾气遮挡视线,路面反射着车灯的光芒——这些恶劣天气条件对人类司机来说已经够困难了,对于正在学习驾驶的人工智能来说更是巨大的挑战。这项由香港科技大学、厦门大学和美团联合完成的突破性研…...

UCLA与多所顶尖大学携手破解折纸生成难题

这项由UCLA牵头,联合德克萨斯A&M大学、犹他大学等多所知名学府共同完成的突破性研究,于2025年2月发表在计算机图形学顶级会议论文集中,论文编号为arXiv:2603.29585v1。有兴趣深入了解的读者可以通过该编号查询完整论文。想象一下&#xf…...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf盐

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

快速掌握AI专著撰写技巧,热门工具大揭秘助你轻松完成专著!

学术专著写作困境与AI工具的兴起 对于许多学者来说,写作学术专著时常面临的最大难题,就是“有限的精力”与“无穷的需求”之间的冲突。撰写专著通常需要3到5年,甚至更长的时间,而研究人员日常还要兼顾教学、科研项目和学术交流等…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)凸

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

揭秘AI写教材技巧!利用AI教材写作实现低查重、高质量教材编写!

教材创作:AI工具助力原创与合规平衡 在教材编写过程中,如何做到原创与合规的平衡是一个重要的议题。很多时候,创作者会在借鉴优秀教材时担心查重率超标,而在自行撰写知识点时又可能面临逻辑不够严谨和内容不准确的问题。引用他人…...

低查重AI教材写作攻略:工具选择、流程步骤与案例解析

谁没有过为教材框架而苦恼的经历呢?面对一片空白的文档,有时甚至会傻傻地发愣半个小时。该先讲解概念,还是当即提供案例呢?章节划分应该根据逻辑还是按课时进行?即使经常调整大纲,最终得到的结果要么不符合…...

YOLO12实战体验:上传图片秒出结果,80类物体识别全解析

YOLO12实战体验:上传图片秒出结果,80类物体识别全解析 1. 初识YOLO12:新一代实时目标检测利器 YOLO12作为Ultralytics在2025年推出的最新目标检测模型,继承了YOLO系列"快、准、狠"的特点。相比前代YOLOv11&#xff0c…...

CustomTkinter:重塑Python桌面应用体验的现代化UI解决方案

CustomTkinter:重塑Python桌面应用体验的现代化UI解决方案 【免费下载链接】CustomTkinter A modern and customizable python UI-library based on Tkinter 项目地址: https://gitcode.com/gh_mirrors/cu/CustomTkinter 传统Tkinter界面陈旧、定制化程度低&…...

OpenClaw+Qwen3-14B数据安全方案:敏感文件本地自动化处理

OpenClawQwen3-14B数据安全方案:敏感文件本地自动化处理 1. 为什么需要本地化的数据安全方案 去年我在处理公司季度财报时遇到一个棘手问题:需要将几十份PDF报表中的关键数据提取出来做交叉分析,但内容涉及商业机密,不敢直接上传…...