STM32 HAL 函数大全 · 第 3 卷

TIM 定时器模块(基础定时 / PWM / 输入捕获 / 输出比较)

版本:v1.1|适用系列:STM32F0 / F1 / F3 / F4 / F7 / L0 / L4 / H7


1. TIM 模块简介与分类

定时器(Timer)是 STM32 中功能最复杂、应用最广泛的外设。它不仅能提供精确的时基(Timebase),还能生成 PWM 波形、测量脉冲宽度、驱动电机编码器等。

STM32 定时器分类

类型典型定时器功能特点典型应用
基本定时器TIM6, TIM7仅支持累加计数,无 IO 引脚产生时基中断、驱动 DAC
通用定时器TIM2 ~ TIM5支持输入捕获、PWM 输出、编码器测量频率、电机控制、LED 调光
高级定时器TIM1, TIM8带死区控制、互补输出、刹车输入三相电机驱动、数字电源

2. 核心参数与时间计算公式

在 CubeMX 配置或代码初始化时,以下三个核心寄存器决定了定时器的时间特性。

2.1 核心寄存器

  1. PSC (Prescaler):预分频器。将定时器总线时钟 (TIM_CLK) 进行分频。

  2. ARR (Auto-Reload Register):自动重装载寄存器。决定计数的周期(即从 0 计数到多少后溢出)。

  3. CNT (Counter):当前计数值(实时变化)。

  4. CCR (Capture/Compare Register):捕获/比较寄存器。用于 PWM 占空比控制或输入捕获存储。

2.2 时间计算公式

假设定时器总线时钟源为TIM_Clk(如 72MHz),配置值计算如下:

1. 溢出时间(中断周期)

溢出频率 = TIM_Clk / ((PSC + 1) * (ARR + 1)) 溢出时间 = 1 / 溢出频率

2. PWM 频率

PWM_Freq = TIM_Clk / ((PSC + 1) * (ARR + 1))

3. PWM 占空比

Duty_Cycle (%) = (CCRx / (ARR + 1)) * 100

注意:由于硬件计数器是从 0 开始计数的,所以在计算配置值时,PSC 和 ARR 的值通常需要减 1

  • 案例:时钟 72MHz,要产生 1kHz 频率(1ms 周期)。

  • 配置PSC = 71(72分频 -> 1MHz),ARR = 999(计数1000次 -> 1ms)。


3. 四大工作模式详解

3.1 基础定时模式 (Base)

  • 原理:计数器从 0 计数到 ARR,产生“更新事件” (Update Event) 并触发中断,然后清零重新计数。

  • 场景:系统滴答、任务调度、软件延时。

3.2 PWM 输出模式 (PWM Generation)

  • 原理:比较 CNT 与 CCRx 的值。

    • CNT < CCRx:输出有效电平(如高电平)。

    • CNT > CCRx:输出无效电平(如低电平)。

  • 场景:LED 亮度调节、电机速度控制、舵机角度控制。

3.3 输入捕获模式 (Input Capture)

  • 原理:当引脚检测到信号跳变(如上升沿)时,硬件立即锁存当前的 CNT 值到 CCRx 寄存器。

  • 场景:测量外部信号的频率、脉冲宽度(高电平时间)。

3.4 输出比较模式 (Output Compare)

  • 原理:当 CNT 等于 CCRx 时,自动翻转引脚电平或触发中断,而不重置计数器。

  • 场景:生成特定相位的波形、在特定时间点触发 ADC 采样。


4. HAL TIM API 函数全集

HAL 库按功能模式对 API 进行了分类。

4.1 基础定时 (Base)

功能轮询模式中断模式DMA 模式
启动HAL_TIM_Base_StartHAL_TIM_Base_Start_ITHAL_TIM_Base_Start_DMA
停止HAL_TIM_Base_StopHAL_TIM_Base_Stop_ITHAL_TIM_Base_Stop_DMA

4.2 PWM 输出 (PWM)

功能轮询模式中断模式DMA 模式
启动HAL_TIM_PWM_StartHAL_TIM_PWM_Start_ITHAL_TIM_PWM_Start_DMA
停止HAL_TIM_PWM_StopHAL_TIM_PWM_Stop_ITHAL_TIM_PWM_Stop_DMA
占空比宏:__HAL_TIM_SET_COMPARE--

4.3 输入捕获 (IC)

功能轮询模式中断模式DMA 模式
启动HAL_TIM_IC_StartHAL_TIM_IC_Start_ITHAL_TIM_IC_Start_DMA
读取HAL_TIM_ReadCapturedValue--

4.4 常用宏定义

// 动态修改 PWM 占空比 (修改 CCR 寄存器) __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__); ​ // 动态修改自动重装载值 (修改 ARR 寄存器,即修改频率) __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__); ​ // 获取计数器当前值 __HAL_TIM_GET_COUNTER(__HANDLE__);

5. 中断与回调机制

STM32 的定时器共用一个中断入口(如TIM3_IRQHandler),用户只需重写这些__weak回调函数。

回调函数名触发时机典型用途
HAL_TIM_PeriodElapsedCallback更新事件(计数溢出)基础定时任务、软件看门狗喂狗
HAL_TIM_PWM_PulseFinishedHAL_TIM_PWM_PulseFinishedCallback`PWM 脉冲结束在 PWM 周期末端触发 ADC、DMA 更新占空比
HAL_TIM_IC_CaptureCallback输入捕获成功读取捕获值、计算频率
HAL_TIM_OC_DelayElapsedCallback输出比较匹配输出比较匹配**精确控制 GPIO 翻转

6. 实战工程示例

示例 1:基础定时中断 (1ms Tick)

目标:使用 TIM2 每 1ms 进入一次中断翻转 LED。配置:Clock=72MHz, PSC=71, ARR=999。

// 1. 初始化开启 (在 main.c 初始化部分) HAL_TIM_Base_Start_IT(&htim2); ​ // 2. 回调函数 (在 main.c 末尾) void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); } }

示例 2:PWM 呼吸灯

目标:使用 TIM3_CH1 (PA6) 驱动 LED,实现亮度渐变。

// 1. 开启 PWM HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); ​ // 2. 修改占空比 (在 while 循环中) uint16_t pwmVal = 0; int8_t step = 10; ​ while (1) { HAL_Delay(20); pwmVal += step; if (pwmVal >= 1000 || pwmVal <= 0) step = -step; // 修改 CCR1 寄存器值 __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwmVal); }

示例 3:输入捕获测频率

目标:测量 TIM2_CH1 引脚输入的 PWM 频率。

uint32_t val1 = 0, val2 = 0; uint8_t isFirstCapture = 1; uint32_t frequency = 0; ​ void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) { if (isFirstCapture) { val1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); isFirstCapture = 0; } else { val2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); uint32_t diff; // 计算差值 (处理溢出) if (val2 > val1) diff = val2 - val1; else diff = (0xFFFF - val1) + val2 + 1; if(diff != 0) frequency = 1000000 / diff; // 假设 1MHz 计数时钟 isFirstCapture = 1; } } }

7. 调试技巧与常见避坑

  1. PWM 不输出

    • 检查是否调用了HAL_TIM_PWM_StartHAL_TIM_PWM_Start`。

    • 高级定时器 (TIM1/TIM8):必须确认是否开启了 MOE (Main Output Enable)** 位。可能需要调用HAL_TIMEx_PWMN_Start或设置__HAL_TIM_MOE_ENABLE

  2. 定时器频率不对: * * 检查APB1/APB2 总线时钟频率。在 STM32F4 等系列中,如果 APB1 分频系数不为 1,则提供给定时器的时钟会x2x2**。

  3. 中断进不去

    • 检查 NVIC 中是否使能了对应定时器的中断。

    • 检查是否使用了_IT后缀的启动函数。

  4. 影子寄存器 (Preload) 坑

    • 修改ARRPSCPSC时,如果开启了Auto-Reload Preload,新值会在下一个更新事件才生效。如需立即生效,请手动产生更新事件__HAL_TIM_URG(htim)`。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python匿名函数(lambda)应用全解析

Python中的lambda函数(匿名函数)是简化代码、提升开发效率的核心工具,尤其适合短小、临时的函数场景。本文从基础语法、核心特性、实战场景到避坑指南,详解lambda函数的使用方法,覆盖搜索引擎高频检索需求(如Pyt…

2026自考必备10个降AIGC工具推荐

2026自考必备10个降AIGC工具推荐 AI降重工具&#xff1a;自考论文的得力助手 随着人工智能技术的不断发展&#xff0c;越来越多的学生在撰写论文时会借助AI工具来提升效率。然而&#xff0c;AI生成的内容往往带有明显的“AI痕迹”&#xff0c;这不仅影响了论文的原创性&#xf…

深度学习毕设项目:基于人工智能的识别水果的成熟度

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

告别选中介难题!2026北京留学中介录取率高权威榜揭晓 - 留学机构评审官

告别选中介难题!2026北京留学中介录取率高权威榜揭晓一、北京学子如何破解选中介难题?时间来到2026年1月5日,又一轮申请季临近尾声,新一届的北京学子与家长已开始为未来筹划。面对市场上数量繁多的留学中介机构,一…

聚焦2026:哪个供应商可以提供老化测试方案/感官分析方案/汽车行业颜色检测方案 - 品牌推荐大师

在科技浪潮奔涌向前的2026年,各行业对于产品品质的把控愈发精细入微,对测试方案的需求也日益多元化与专业化。老化测试关乎产品使用寿命与稳定性,是保障产品长期可靠运行的关键;感官分析聚焦消费者直观体验,直接影…

量化权重分组保精度

&#x1f493; 博客主页&#xff1a;借口的CSDN主页 ⏩ 文章专栏&#xff1a;《热点资讯》 量化权重分组保精度&#xff1a;在模型压缩中实现高精度与高效能的平衡目录量化权重分组保精度&#xff1a;在模型压缩中实现高精度与高效能的平衡 引言&#xff1a;模型压缩的精度悖论…

计算机深度学习毕设实战-基于人工智能python深度学习的餐桌美食识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

基础打表练习题

求 A249665 前 \(n\) 项的 \(m\) 次方和,对 \(10^9 + 7\) 取模。 \(1 \leq n \leq 10^{18}\),\(1 \leq m \leq 3\)。我们可以暴力枚举 \(1\) 到 \(n\) 的排列,由此求出 \(a_n\)。 经过打表,可以得到 \(A\) 的前几项…

计算机深度学习毕设实战-基于卷神经网络深度学习识别水果的成熟度

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

学术双标红 “终结者”!虎贲等考 AI 让降重 + 降 AIGC 双向合规

学术写作中&#xff0c;“查重标红” 与 “AIGC 检测标红” 是两大高频痛点。传统工具要么机械降重导致逻辑断裂&#xff0c;要么无法根除机器痕迹&#xff0c;让论文陷入 “改了又错、错了再改” 的内耗。虎贲等考 AI 以第五代智能技术为核心&#xff0c;创新打造 “语义重构 …

【毕业设计】机器学习基于python深度学习识别水果的成熟度

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

FastAPI异步方法中调用同步方法

在FastAPI的异步方法中正确调用同步方法,避免阻塞整个异步事件循环队列。前言 在异步方法中调用同步方法,会直接阻塞整个事件循环,导致应用在执行同步方法期间无法处理其他任何并发请求,从而拖垮整个服务的性能。 …

复杂项目迭代不踩坑,MonkeyCode 沉浸式开发让 AI 研发可控可追溯

当前AI编程工具百花齐放,但多数仅能实现“编写代码、运行Demo”的基础功能,难以匹配真实工程研发的复杂场景。长亭科技全新推出的AI开发平台MonkeyCode,成功打破这一行业瓶颈——它以企业级研发视角构建,让AI深度参…

深度学习毕设选题推荐:基于python深度学习识别水果的成熟度卷神经网络

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

科研 PPT 还在 “复制粘贴”?虎贲等考 AI:10 分钟生成期刊级演示文稿,逻辑颜值双封神

学术科研场景中&#xff0c;PPT 是成果传递的核心载体 —— 开题答辩要靠它展现研究价值&#xff0c;学术汇报要凭它打动听众&#xff0c;毕业答辩要借它赢得认可。但多数科研人都陷入过 PPT 制作的 “低效怪圈”&#xff1a;用模板套内容却逻辑混乱&#xff0c;手动排版却格式…

中转平台终极测评:poloai.top 凭什么成为开发者首选? - poloapi-ai大模型

随着 AI 大模型在编程、设计、科研等领域的深度渗透,第三方中转平台已成为国内开发者解锁 Claude、GPT、Gemini 等顶尖模型的核心渠道。但市面上各类中转平台良莠不齐,有的存在支付繁琐、稳定性差的问题,有的暗藏隐…

2026年企业知识库私有化部署厂商选型指南:安全与效率双驱动的落地路径 - 品牌2026

2026年,企业数字化转型进入深水区,知识管理的安全性与高效性成为核心诉求,知识库私有化部署凭借“数据不出域、自主可控”的核心优势,成为金融、医疗、政务等高合规行业的刚需选择。据《智能驱动增长:人工智能客户…

问卷设计 “传统派 VS AI 派” 终极对决!虎贲等考 AI:让调研效率与质量双向碾压

做学术调研、市场分析、教学评估&#xff0c;问卷设计是绕不开的关键环节。有人坚守 “传统人工设计”&#xff0c;坚信 “逐字打磨才够精准”&#xff0c;却在逻辑漏洞、表述歧义中反复内耗&#xff1b;有人拥抱 “普通 AI 设计”&#xff0c;期待 “高效产出”&#xff0c;却…

2026标书查重最强工具,快来为你的标书穿上“防弹衣” - 资讯焦点

2026标书查重最强工具,快来为你的标书穿上“防弹衣” 2026年开年,一份来自四川的招投标新规,像一颗投入湖面的石子,在整 个建筑圈激起了千层浪。文件中一句看似不起眼的话——“ 可将滥用人工智能软件编制冗长无序…

2026最新三轮车花鼓企业top5推荐榜!优质生产厂家及服务商解析/选择指南 - 全局中转站

引言 随着绿色出行理念普及与骑行运动专业化发展,三轮车花鼓作为传动系统核心部件,其性能稳定性、传动效率与轻量化水平直接决定骑行体验。据中国自行车协会2025年度行业报告显示,国内三轮车花鼓市场合规产品占比仅…