stm32定时器
类型 | 编号 | 总线 | 功能 |
---|---|---|---|
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
通用定时器 | TIM2、TIM3 TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
定时器结构
基本定时器
计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)
计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
= CK_PSC / (PSC + 1) / (ARR + 1)
CK_CNT:计数器计数频率
CK_CNT_OV:计数器溢出频率
CK_PSC:时钟源频率
PSC:预分频寄存器
ARR:自动重装寄存器
- CNT计数器自动计数,当与ARR自动重装寄存器的值相等时长生更新中断或更新事件。
- 带阴影的寄存器代表含有影子寄存器,值改变时,可配置为等待更新事件后再改变或立刻改变。
通用定时器
- 带阴影的寄存器代表含有影子寄存器,值改变时,可配置为等待更新事件后再改变或立刻改变。
- TIMx_ETR为外部GPIO引脚的一个复用功能(见引脚定义表),可提供外部时钟,此时为外部时钟模式2。
- TRGI作为触发输入可触发定时器的从模式,TRGI也可作为外部时钟成为外部时钟模式1。
- 外部时钟模式1可用的线路有:TIMx_ETR引脚、ITR信号(来自其他定时器的TRGO输出)、TIF_ED(输入捕获单元的CH1引脚)、TI1FP1/TI2FP2(ch1/ch2引脚)
- 编码器接口可以读取正交编码器的输出波形(通过TI1FP1/TI2FP2)
- TRGO可通向其他定时器等(通过将更新事件的信号映射到TRGO上实现主从触发功能)
外部时钟电路:
外部时钟模式1:TRGI作为外部时钟
外部时钟模式2:TIMx_ETR为外部时钟
输出比较电路:
CNT与CCR比较的结果输出到输出比较控制器产生OC1ref的信号进行极性选择输出OC1引脚的高低电平。
TIMx_CCMR1:配置输出比较控制器的输出比较模式
TIMx_CCER:配置极性选择
CC1E:选择使能/失能输出
输入捕获电路:
- 高级定时器和通用定时器拥有4个输入捕获通道
- ch1通道的信号经过一个异或门的选择(此图中未体现,为了无刷电机的驱动)接入TI1进行滤波和极性选择产生两个输出TI1FP1和TI1FP2(此图仅有TI1FP1),这是为了PWMI模式,之后信号进入预分频器,分频后的信号将触发捕获电路。每来一个触发信号CNT的值相CCR转运一次并发生捕获事件(置状态寄存器的标志位或产生中断)
编码器接口电路:
编码器接口的两个输入引脚借用了输入捕获的通道1(ch1)和通道2(ch2)。
将TF1FP1和TF2FP2的信号输入到编码器接口,编码器接口托管时钟和CNT计数方式(自增、自减、中央对齐),无需手动设置。
从CNT中读出旋转速度或角度。
主从触发模式:
主模式:将定时器内部信号映射到TRGO引脚,用于出发别的外设
触发源选择:选择从模式TRGI的信号来源
从模式:接收TRGI的信号,并自动实现相应功能
主模式 | 信号 | 从模式 | 信号 |
---|---|---|---|
Reset | 复位信号 | Closed | 关闭从模式 |
Enable | 使能定时器的信号 | Encoder1 | 编码器模式1(仅TI2计数) |
Update | 定时器的更新信号 | Encoder2 | 编码器模式2(仅TI1计数) |
OC1 | 比较或捕获成功信号 | Encoder3 | 编码器模式3(都计数) |
OC1REF | OC1REF的信号 | Reset | 计数器复位清零 |
OC2REF | OC2REF的信号 | Gated | 输入高电平启动计数器 低电平停止(不复位) |
OC3REF | OC3REF的信号 | Trigger | 启动计数器(不复位) |
OC4REF | OC4REF的信号 | External1 | 驱动计数器计数 |
高级定时器
重复次数计数器可实现每隔几个计数周期才发生一次更新信号。
-
DTG是死区生成电路。
-
BRK是刹车输入电路。
时基单元初始化流程
- TIM选择:TIM_InternalClockConfig() TIM1 ~ TIM4//内部时钟源选择
- TIM时基单元结构体:TIM_TimeBaseInitTypeDef
- TIM_ClockDivision:TIM_CKD_DIV1
- TIM_CounterMode:计数方式(向上计数等)
- TIM_Period:ARR自动重装计数器
- TIM_Prescaler:PSC预分频
- TIM_RepetitionCounter:重复计数器
- TIM初始化:TIM_TimeBaseInit()
------ BY Flier
2023.8.29
Reference:江协科技、《stm32f10x用户手册》、《stm32库开发实战指南教程》