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.

相关推荐
会编程是什么感觉...5 小时前
算法 - PEC校验
单片机·算法
清风6666665 小时前
基于单片机的全自动洗衣机控制器设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
帅帅兔子8 小时前
2.4寸SPI串口ILI9341芯片彩色LCD驱动
stm32·单片机·嵌入式硬件·mcu
蓝天居士9 小时前
PY32F040单片机介绍(1)
单片机·国产mcu·1024程序员节
柒月玖.10 小时前
基于AT89C52单片机的计算器设计与仿真
单片机·嵌入式硬件
乐十九10 小时前
物模型详解
嵌入式硬件
czhaii11 小时前
STC32G144K246,高速PWM@240Mhz 运行测试
stm32·单片机·fpga开发
炸膛坦客12 小时前
Cortex-M3-STM32F1 开发:(十一)ARM Cortex-M 内核中的 MPU 和 FPU
arm开发·stm32·嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘12 小时前
单片机开发---分层架构设计
单片机·嵌入式硬件·mongodb