1. 通用定时器简介(F1为例)
F1系列通用定时器有4个,TIM2/TIM3/TIM4/TIM5
主要特性:
16位递增、递减、中心对齐计数器(计数值:0~65535);
16位预分频器(分频系数:1~65536);
可用于触发DAC、ADC;
在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求;
4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式;
使用外部信号控制定时器且可实现多个定时器级联的同步电路(用一个定时器的溢出事件作为下一个定时器的时钟源驱动计数器计数);
支持编码器和霍尔传感器电路等(用于电机)。
2. 通用定时器框图
定时器的核心是③时基单元,不管是通用定时器还是高级定时器,都是在时基单元的基础上拓展出来的
将通用定时器分为六部分来一一介绍:
①时钟源
通用定时器的时钟源有4类
第一类 内部时钟(CK_INT)
第二类 内部触发输入(ITR0~ITR1)
第三类 外部时钟模式2(TIMx_ETR),来自IO口复用为TIMx_ETR引脚
第四类 外部时钟模式1,来自TIMx_CH1、TIMx_CH2
为什么说不来自通道3和通道4,因为①时钟源框图里没有对应的TI3FP和TI4FP信号!
我们可以在《数据手册》或《原理图》中找到管脚定义,各个功能对应的IO口;
②控制器
TRGO触发信号可以触发DAC、ADC以及到其他寄存器;
什么叫触发到其他寄存器呢?
触发输出信号会连接另一寄存器的内部触发输入信号(ITR0~ITR1),从而实现级联的功能;
③时基单元
原理与基本定时器相同,不在赘述,可以参考基本定时器部分帖子!
④输入捕获
应用流程:比如外部信号通过通道1复用的IO口进入通道1产生TI1信号,经过输入滤波器和边沿检测器产生TI1FP1和TI1FP2,通过相关配置选择映射到IC1或IC2(也可理解为输入捕获通道1或输入捕获通道2),经过预分频器,假设边沿检测器配置为上升沿检测,当捕获到上升沿时,会产生捕获事件U并把计数器的值转移到捕获/比较寄存器里,也会产生捕获中断CC1I(需要我们自己开启)。其他通道类似。
(通用IO,就是GPIO外设输入出输出功能。复用就是作为其他外设的的输入或者输出使用)
为什么要有输入滤波器和边沿检测器呢?
答:当外部来一个脉冲信号,这个信号不一定是稳定的,可能会有毛刺,而这些毛刺的频率一定会比脉冲高电平的信号要高,因此控制输入滤波器就可以把高频的毛刺信号过滤掉,来保证脉冲信号的稳定;
而边沿检测器的作用是检测信号是上升沿还是下降沿。
⑤捕获/比较(公共)
属于公共部分
⑥输出比较
应用流程:我们会往捕获/比较寄存器里写入比较值,计数器正常计数,当CNT计数器的计数值=捕获/比较寄存器的比较值(影子)时,会产生比较事件、输出参考信号(OC1REF,高电平有效)、比较中断(前提要配置),来进行输出控制(8种模式)产生OC1信号通过通道1输出给对应的IO口。其他通道类似。
图下面的ETRF信号是控制输出参考信号OC1REF的,会把OC1REF强制清零。
总结:输入捕获和输出比较是分时复用的,当输入捕获模块工作时,输出比较模块失效,当输出比较模块工作时,输入捕获模块失效。
3. 计数器时钟源
计数器时钟源寄存器设置方法
计数器时钟选择类型 | 设置方法 |
内部时钟(CK_INT) | 设置TIMx_SMCR的SMS=000 |
外部时钟模式1:外部输入引脚(TIx) | 设置TIMx_SMCR的SMS=111 |
外部时钟模式2:外部触发输入(ETR) | 设置TIMx_SMCR的ECE=1 |
内部触发输入(ITRx) | 设置可参考STM32F10xxx参考手册_V10(中文版).pdf 14.3.15节 |