1. 项目概述
在嵌入式系统开发中,定时器是最基础也最强大的外设之一。STM32的通用定时器不仅能实现精确的定时功能,还能通过输入捕获模式测量外部信号的周期和频率。这个功能在电机控制、传感器数据采集、通信协议解析等场景中都有广泛应用。
我刚开始接触STM32时,对输入捕获模式的理解也是一头雾水。经过多个项目的实践,现在终于能够熟练运用这个功能。今天我就把自己踩过的坑和总结的经验分享给大家,手把手教你如何用STM32的通用定时器实现信号周期和频率的测量。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件基础与原理分析
2.1 STM32通用定时器结构
STM32的通用定时器主要由以下几部分组成:
- 时基单元:包括预分频器(PSC)、自动重装载寄存器(ARR)和计数器(CNT)
- 输入捕获单元:包括捕获/比较寄存器(CCR)和捕获/比较通道
- 中断和DMA控制逻辑
以TIM2为例,它有4个独立的捕获/比较通道,每个通道都可以配置为输入捕获或输出比较模式。在输入捕获模式下,当检测到指定的边沿信号时,当前计数器的值会被锁存到对应的CCR寄存器中,并可以产生中断。
2.2 输入捕获工作原理
输入捕获模式测量信号周期的原理其实很简单:
- 配置定时器以一定频率计数
- 配置输入捕获通道在信号上升沿/下降沿触发捕获
- 当边沿到来时,记录当前计数器值到CCR寄存器
- 两次捕获值之差就是信号的时间间隔
- 通过计算得到信号的周期和频率
举个例子,如果定时器时钟为1MHz(1us计数一次),两次捕获值差为1000,那么信号周期就是1000us,频率就是1kHz。
3. 软件实现详解
3.1 开发环境准备
我们需要准备以下工具和环境:
- STM32开发板(我使用的是STM32F103C8T6最小系统板)
- STM32CubeMX配置工具
- Keil MDK或IAR等IDE
- 逻辑分析仪或示波器(用于验证测量结果)
3.2 CubeMX配置步骤
- 打开CubeMX,选择对应的STM32型号
- 配置时钟树,确保定时器时钟源正确
- 选择TIMx(如TIM2),配置为内部时钟源
- 选择Channel1为"Input Capture direct mode"
- 设置预分频器(PSC)和自动重装载值(ARR)
6
