STM32定时器基础与应用:从配置到实战
1. STM32定时器基础概念与分类STM32系列微控制器内置了多种定时器资源根据功能复杂度可分为三大类基本定时器(TIM6/TIM7)16位向上计数器仅支持定时功能无外部IO接口典型应用系统时钟基准、简单延时通用定时器(TIM2-TIM5)16位可向上/向下计数支持PWM输出、输入捕获每个定时器4个外部IO典型应用电机控制、信号测量高级定时器(TIM1/TIM8)包含通用定时器所有功能支持三相电机互补输出每个定时器8个外部IO典型应用变频器、复杂PWM控制注意不同STM32子系列定时器配置可能不同使用前需查阅对应型号的参考手册。2. 基本定时器功能实现详解2.1 时钟源配置STM32定时器时钟源来自APB1总线基本定时器挂载在APB1时钟配置需注意// 使能TIM6时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);时钟路径 APB1预分频器 → 定时器时钟(TIMxCLK) → 预分频器(PSC) → 计数器时钟(CK_CNT)计算公式 CK_CNT TIMxCLK / (PSC 1)例如APB1时钟为36MHz预分频系数2时 TIMxCLK 36MHz × 2 72MHz 若PSC71则CK_CNT 72MHz / (711) 1MHz2.2 定时器初始化结构体标准库使用TIM_TimeBaseInitTypeDef结构体配置定时器typedef struct { uint16_t TIM_Prescaler; // 预分频值 (0-65535) uint16_t TIM_CounterMode; // 计数模式(基本定时器只能向上) uint32_t TIM_Period; // 自动重装载值(0-65535) uint16_t TIM_ClockDivision; // 时钟分频(基本定时器无此功能) uint8_t TIM_RepetitionCounter; // 重复计数器(高级定时器专用) } TIM_TimeBaseInitTypeDef;基本定时器只需配置TIM_Prescaler和TIM_Period两个成员。2.3 定时时间计算定时时间公式 T (ARR 1) × (PSC 1) / TIMxCLK示例实现1ms定时TIMxCLK 72MHz设置PSC71 → CK_CNT1MHz设置ARR999 → 中断周期(9991)/1MHz1ms3. 完整代码实现与解析3.1 硬件设计本例使用TIM6实现1秒定时控制LED闪烁硬件连接LED连接任意GPIO(如PA5)无需外部电路仅使用MCU内部资源3.2 软件实现3.2.1 定时器配置void TIM6_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 使能TIM6时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // 定时器基础配置 TIM_TimeBaseStructure.TIM_Period 999; // 自动重装载值 TIM_TimeBaseStructure.TIM_Prescaler 71999; // 预分频值 TIM_TimeBaseInit(TIM6, TIM_TimeBaseStructure); // 清除更新中断标志 TIM_ClearFlag(TIM6, TIM_FLAG_Update); // 使能更新中断 TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); // 启动定时器 TIM_Cmd(TIM6, ENABLE); }配置说明时钟72MHz预分频71999 → CK_CNT72MHz/720001kHzARR999 → 中断周期1kHz/10001s3.2.2 中断优先级配置void TIM6_NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel TIM6_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority 1; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure); }3.2.3 中断服务程序volatile uint32_t timerCount 0; // 全局计时变量 void TIM6_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update) ! RESET) { timerCount; TIM_ClearITPendingBit(TIM6, TIM_FLAG_Update); } }3.2.4 主函数实现int main(void) { // 初始化LED GPIO LED_Init(); // 配置定时器 TIM6_Config(); TIM6_NVIC_Config(); while (1) { if (timerCount 1) { // 1秒到达 timerCount 0; LED_Toggle(); // 翻转LED状态 } } }4. 进阶应用与问题排查4.1 精确延时实现利用定时器实现微秒级延时函数void Delay_us(uint32_t us) { TIM6-CNT 0; // 计数器清零 TIM6-ARR us - 1; // 设置重装载值 TIM_Cmd(TIM6, ENABLE); // 启动定时器 while (!TIM_GetFlagStatus(TIM6, TIM_FLAG_Update)); // 等待更新标志 TIM_ClearFlag(TIM6, TIM_FLAG_Update); // 清除标志 TIM_Cmd(TIM6, DISABLE); // 关闭定时器 }4.2 常见问题排查定时器不工作检查时钟是否使能验证APB1预分频系数确认TIM_Cmd()已调用中断不触发检查NVIC配置确认TIM_ITConfig()已使能中断确保中断服务程序名称正确定时时间不准确检查时钟树配置确认PSC和ARR计算正确考虑中断响应延迟调试技巧在中断服务程序中设置断点通过查看CNT寄存器值验证定时器是否正常运行。5. 不同场景下的配置建议5.1 短时间定时us级使用较高的CK_CNT频率减小PSC设置较小的ARR值考虑直接查询标志位代替中断5.2 长时间定时秒级使用较大的PSC值降低CK_CNT结合软件计数器扩展定时范围启用中断处理5.3 低功耗应用选择RUN模式下可用的最低时钟频率合理配置自动唤醒功能考虑使用RTC替代定时器通过本文的详细讲解和代码实现开发者可以快速掌握STM32基本定时器的使用方法并能够根据实际需求进行灵活配置和应用扩展。

相关新闻

gemma-4-e2b-it-mxfp4模型架构深入剖析:理解131K上下文长度

gemma-4-e2b-it-mxfp4模型架构深入剖析:理解131K上下文长度

gemma-4-e2b-it-mxfp4模型架构深入剖析:理解131K上下文长度 【免费下载链接】gemma-4-e2b-it-mxfp4 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/gemma-4-e2b-it-mxfp4 gemma-4-e2b-it-mxfp4是一款由mlx-community开发的先进AI模型&#xf…

2026/10/17 7:19:52 阅读更多 →
Playwright高级截图技巧:区域截取、透明背景与CI集成实战

Playwright高级截图技巧:区域截取、透明背景与CI集成实战

1. 项目概述:不止于“按一下”的自动化截图 做自动化测试的,谁还没截过几张图呢?但如果你还停留在用 page.screenshot() 拍个“到此一游”照的阶段,那可能错过了 Playwright 截图 API 里 80% 的实用价值。截图远不止是记录一个页…

2026/10/16 14:02:32 阅读更多 →
深入解析XNU内核:掌握macOS和iOS操作系统的核心引擎

深入解析XNU内核:掌握macOS和iOS操作系统的核心引擎

深入解析XNU内核:掌握macOS和iOS操作系统的核心引擎 【免费下载链接】xnu 项目地址: https://gitcode.com/gh_mirrors/xn/xnu XNU内核作为macOS和iOS操作系统的核心引擎,是现代苹果设备稳定运行的技术基石。这个混合内核巧妙融合了Mach微内核的先…

2026/10/16 17:58:53 阅读更多 →

最新新闻

零成本AI驱动应用上架全流程方案(Web + 小程序双路径):TaoToken 统一 Key 打通 Claude Code 与云开发部署实录

零成本AI驱动应用上架全流程方案(Web + 小程序双路径):TaoToken 统一 Key 打通 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/17 22:41:40 阅读更多 →
AI生成测试代码很干~干货:用TaoToken统一Key打通Cursor上下文管理

AI生成测试代码很干~干货:用TaoToken统一Key打通Cursor上下文管理

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

2026/10/17 22:41:40 阅读更多 →
LLM+RAG+知识图谱:打造可追溯多跳推理的AI Agent

LLM+RAG+知识图谱:打造可追溯多跳推理的AI Agent

简介:《Building AI Agents with LLMs, RAG, and Knowledge Graphs》是Packt Publishing推出的英文原版技术手册,面向具备机器学习与自然语言处理基础、熟悉Python的AI开发者、研究人员和技术负责人。全书聚焦大语言模型、检索增强生成与知识图谱的协同应…

2026/10/17 22:41:40 阅读更多 →
Code Agent浪潮来袭:用TaoToken统一Key打通Claude Code与Codex的完整任务交付链路

Code Agent浪潮来袭:用TaoToken统一Key打通Claude Code与Codex的完整任务交付链路

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

2026/10/17 22:41:40 阅读更多 →
Earcut耳切法:任意多边形快速三角化的轻量索引方案

Earcut耳切法:任意多边形快速三角化的轻量索引方案

简介:这是一份基于耳切法(Ear Clipping)实现多边形三角化的 C 资源,核心库源自 mapbox 的 earcut 算法,并参考 FIST 与 David Eberly 的经典思路做了改良。它通过 Z 阶曲线散列优化顶点排序,能够处理带孔洞…

2026/10/17 22:40:40 阅读更多 →
组态王6.55发布:报表秒建、Web可控、双库协同的可用性革命

组态王6.55发布:报表秒建、Web可控、双库协同的可用性革命

简介:本资源为亚控科技组态王6.55(中文版)官方产品文档,面向工业自动化初学者、系统集成工程师及SCADA项目开发人员,聚焦于组态软件基础配置、Web发布、报表生成与KingHistorian数据库集成等核心应用场景。文档以单个W…

2026/10/17 22:40:40 阅读更多 →

日新闻

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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →