STM32F103C8T6--定时器

基本概念

定时器本质上是一个计数器,它可以对内部时钟或外部输入信号进行计数。当计数值达到设定的阈值时,会触发相应的事件(如中断、输出电平变化等)。这些定时器功能多样,可用于生成 PWM 信号、测量输入信号频率、产生定时中断等。

|------------|---------------------|------------|----------------------------------------------------|
| 类型 | 编号 | 总线 | 功能 |
| 高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能,主要用于电机控制 |
| 通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
| 基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断 、主模式触发DAC的功能 |

(STM32F103C8T6只有TIM1 - 4)

时基单元

  1. TIMx_PSC:预分频器寄存器,设置时钟分频系数
  2. TIMx_ARR:自动重装载寄存器,设置计数上限
  3. TIMx_CNT:计数器寄存器,存储当前计数值

++++分频:++++ 预分频器(prescaler PSC)可以设置分频系数,所谓分频就是分组,比如二分频,就是两次计数算一次,通过PSC可以调整每秒计数次数,++++PSC 控制计数速度++++ (每秒计数次数),++++ARR 控制计数范围++++ (计数到多少归零)。两者互不影响:改变 ARR 仅改变溢出周期。CNT 的计数频率由 PSC 动态分频决定。

影子寄存器:PSC和ARR可以使用影子寄存器,作用是在这次计数周期结束后才改变值。

时钟源

ITR 是定时器(如 TIM2、TIM3、TIM4 等)的内部触发输入通道 ,专门用于接收其他定时器(主定时器)的触发信号。其核心作用是:将一个定时器(主定时器)的输出作为另一个定时器(从定时器)的触发源,实现定时器之间的同步(如同时启动、计数复位、周期联动等)。

TIM_SelectInputTrigger();触发源选择

TIM_TS_ITR0: Internal Trigger 0

TIM_TS_ITR1: Internal Trigger 1

TIM_TS_ITR2: Internal Trigger 2

TIM_TS_ITR3: Internal Trigger 3

TIM_TS_TI1F_ED: TI1 Edge Detector

TIM_TS_TI1FP1: Filtered Timer Input 1

TIM_TS_TI2FP2: Filtered Timer Input 2

TIM_TS_ETRF: External Trigger input

TI1_ED(Timer Input 1 Edge Detection,定时器输入通道 1 的边沿检测) 是输入捕获模式下的一种触发方式,用于检测定时器输入通道 1(TI1)上的双边沿(上升沿和下降沿) 跳变,并触发捕获事件。

TI1FP1 的含义

  • TI1:第一个输入通道(Timer Input 1),是定时器外部输入信号的原始物理通 TIMx_CH1
  • FP1 :是 "Filtered and Polarized 1" 的缩写,即 "经过滤波和极性选择后的信号",其中:
    • Filtered(滤波):原始输入信号(TI1)会经过数字滤波处理,减少噪声干扰;
    • Polarized(极性):可配置信号的有效边沿(上升沿 / 下降沿 / 双边沿);
    • 1:对应捕获比较通道 1(IC1)。
  • TI1FP1:TI1 映射到 IC1(直接映射,TIM_ICSelection_DirectTI);
  • TI1FP2:TI1 映射到 IC2(交叉映射,TIM_ICSelection_IndirectTI)。

ETR(External Trigger Input,外部触发输入)CH(输入通道,如 TI1~TI4,对应定时器的 Channel 1~4) 都是用于接收外部信号的接口,但两者的功能定位、应用场景和硬件设计有显著区别。

  • ETR :是定时器的专用外部触发控制接口 ,核心作用是控制定时器的运行状态(如作为时钟源驱动计数器、触发定时器启动 / 复位等),更偏向于 "对定时器本身的控制"。
  • CH(TI1~TI4) :是定时器的通用输入捕获通道 ,核心作用是获取外部信号的细节信息(如跳变时刻、脉冲宽度等),更偏向于 "对外部信号的测量与记录"。

ETR 可以直接控制时基单元的运行,而 CH 通道不会影响时基单元的核心工作逻辑

  • 若需要用外部信号控制定时器的运行 (如作为时钟源、触发复位),选ETR
  • 若需要测量外部信号的细节 (如跳变时刻、脉冲宽度、周期),选CH(TI1~TI4)

从模式

TIM_SelectSlaveMode();从模式选择

#define TIM_SlaveMode_Reset 复位模式:触发时复位CNT,持续计数;

#define TIM_SlaveMode_Gated 门控模式:触发信号电平控制CNT是否计数;

#define TIM_SlaveMode_Trigger 触发模式:触发边沿启动CNT计数(不复位)

#define TIM_SlaveMode_External1 外部时钟模式 1:触发信号作为CNT的计数时钟。

外部时钟模式1:和外部时钟模式2基本相同

复位模式:每次触发都会复位时基单元,即计数器清0,自动重装载器和预分频器的影子寄存器更新。使用复位模式需要给时钟源选择内部时钟或外部时钟模式2。由于没有触发CNT==ARR,没有更新事件产生,即使配置更新中断也不会触发。

门控模式:触发信号电平控制CNT是否计数,可以设置开门边沿,开门才计数。

触发模式:触发边沿启动CNT计数(不复位),只能开不能关。


触发模式可以配合单脉冲模式(计数到ARR更新后停在0)

TIM_SelectOnePulseMode();

TIM_OPMode_Single

TIM_OPMode_Repetitive

输入捕获

当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中。

每个高级定时器和通用定时器都拥有4个输入捕获通道

可配置为PWMI模式,同时测量频率和占空比

可配合主从触发模式,实现硬件全自动测量

TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);主模式

* - For all TIMx

* @arg TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is used as the trigger output (TRGO).

* @arg TIM_TRGOSource_Enable: The Counter Enable CEN is used as the trigger output (TRGO).

* @arg TIM_TRGOSource_Update: The update event is selected as the trigger output (TRGO).

*

* - For all TIMx except TIM6 and TIM7

* @arg TIM_TRGOSource_OC1: The trigger output sends a positive pulse when the CC1IF flag is to be set, as soon as a capture or compare match occurs (TRGO).

* @arg TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output (TRGO).

* @arg TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output (TRGO).

* @arg TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output (TRGO).

* @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output (TRGO).

每个通用定时器(如 TIM2~TIM5)和高级定时器(如 TIM1、TIM8)包含 4 个独立的输出比较通道(OC1~OC4),可同时控制 4 路信号(相互独立)。

输出比较

输出比较模式下,定时器会将计数器值(CNT)与比较寄存器值(CCR)进行比较,当两者相等时触发输出动作(如翻转电平、置高 / 置低)。

每个通道包含:

  1. 比较寄存器(CCR):存储用于比较的目标值。
  2. 输出模式控制器:根据 CNT 与 CCR 的比较结果,控制输出动作,PWM 模式 1||2、翻转模式、强制高 / 低等。
  3. 输出极性控制:设置输出信号的极性(高电平有效或低电平有效)。
  4. 输出使能控制:决定是否启用该通道的输出。

PWM(Pulse Width Modulation,脉冲宽度调制)是一种通过调节脉冲信号的占空比来控制平均电压或功率的技术。

  1. 周期(T):一个完整脉冲的持续时间,由定时器的自动重装载值(ARR)决定。
  2. 频率(f):周期的倒数,即 f = 1/T,单位为 Hz。f = 系统时钟 / (PSC+1) / (ARR+1).
  3. 占空比(Duty Cycle):高电平时间(Ton)占整个周期的比例,计算公式为:
    Duty Cycle = Ton / T × 100%
  4. PWM分辨率: Reso = 1 / (ARR + 1)

编码器

TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)

TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level.

TIM_EncoderMode_TI2: Counter counts on TI2FP2 edge depending on TI1FP1 level.

TIM_EncoderMode_TI12: Counter counts on both TI1FP1 and TI2FP2 edges depending on the level of the other input.

相关推荐
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg20056 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT7 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen8 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠11 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_11 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技13 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计13 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦14 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报14 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机