目录
1 高级控制定时器介绍
2 高级控制寄存器功能框图
2.1 时钟源
2.1.1 内部时钟源CK_INT
2.1.2 外部时钟模式1
2.1.3外部时钟模式1—实例之向上计数器在TI2输入端的上升沿计数配置
2.1.4 外部时钟模式2
2.1.5 外部时钟模式2—实例之在ETR下每2个上升沿计数一次的向上计数器配置
2.1.6 内部触发输入
2.2 控制器
2.3 时基单元器
2.3.1 计数器寄存器TIMx_CNT
2.3.2 预分频器寄存器TIMx_PSC
2.3.3 自动重载寄存器TIMx_ARR
2.3.4 重复次数寄存器TIMx_RCR
2.4 输入捕获
2.5 PWM输入模式
高级控制定时器(TIM1和TIM8)和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能,相比于通用定时器,高级定时器增加了可编程死区互补输出、重复计数器、刹车功能
高级控制定时器包含一个16位向上、向下、向上/向下自动重载计数器,一个16位计数器、一个16位可编程预分频器(预分频器的时钟源可选择内部时钟or外部时钟)、以及一个8位重复计数器
定时器的多种高级功能是需要外部引脚配合使用的,比如输入捕获(脉冲计数、上升沿或下降沿时间检测、PWM输入检测)、输出比较(脉冲输出、步进电机控制)、PWM脉冲宽度调节等
GPIO作为定时器功能就是IO的复用,在程序中要设置为复用模式,一个定时器功能引脚可以对应不同的IO
高级控制定时器有4个时钟源:
1、内部时钟源CK_INT
2、外部时钟模式1:外部通道输入引脚TINx(x取1、2)
3、外部时钟模式2:外部触发ETR
4、内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器
从模式控制寄存器TIMx_SMCR的SMS = 000
内部时钟CK_INT来自于STM32芯片内部的APB总线,对TIM1和TIM8来说是168MHz
从模式控制寄存器TIMx_SMCR的SMS = 111
框1:时钟信号输入引脚
使用外部时钟模式1时,有2个来自定时器输入通道的时钟信号,分别是TI1FP1和TI2FP2, TI1FP1对应IC1(TIMx_CH1),TI2FP2对应IC2(TIMx_CH2),通过配置TIMx_CCMR1的位CCxS[1:0]来选择哪一路信号,TI3和TI4不能作为外部时钟模式1的引脚
框2:滤波器
滤除输入信号上的高频干扰,可以通过滤波器配置不同的滤波时间
框3:边沿检测
检测上升沿有效还是下降沿有效,可以TIMx_CCER的位CCxP和CCxNP配置
00:非反相/上升沿触发、01:反相/下降沿触发
10:保留,不使用此配置、11:未反相/边沿触发
框4:触发选择
若选择外部时钟模式1,则有两个触发源,一个是滤波后的定时器输入1(TI1FP1)和滤波后的定时器输入2(TI2FP2),可有TIMx_SMCR的位TS[2:0]配置
框5:从模式选择
选定了触发源信号后,信号是接到TRGI引脚的,让触发信号成为外部时钟模式1的输入,即为CK_PSC
1、配置TIMx_CCMR1寄存器CC2S = 01,通道2配置为输入,IC2映射在TI2上
2、配置TIMx_CCMR1寄存器IC2F[3:0],选择滤波器带宽(IC2F = 0000时即不需要滤波器)
3、配置TIMx_CCER寄存器CC2P = 0和CC2NP = 0,选定上升沿极性
4、配置TIMx_SMCR寄存器SMS = 111,选择定时器外部时钟模式1
5、配置TIMx_SMCR寄存器TS = 110,选定TI2作为触发输入源
6、设置TIMx_CR1寄存器CEN = 1,启动计数器
TIMx_SMCR寄存器的ECE = 1
框1:时钟信号输入引脚
使用外部时钟模式2时,时钟信号来自于定时器特定输入通道TIM_ETR
框2:外部触发极性
TIMx_SMCR寄存器中的ETP位控制触发极性
0:ETR未反相,高电平或上升沿有效; 1:ETR反相,低电平或下降沿有效
框3:分频器
当触发信号的频率很高时,就必须使用分频器进行降频,有1/2/4/8可选,由TIMx_SMCR寄存器中的ETPS[1:0]配置,保证输出信号ETRP频率小于TIMx_CLK频率的1/4
框4:滤波器
若ETRP信号的频率过高或者混杂有高频干扰信号,就需要使用滤波器对ETRP信号重新采样,达到降频或者去除干扰的目的,由TIMx_SMCR的位ETF[3:0]配置,其中是由内部时钟CK_INT分频得到,由TIMx_CR1的位CKD[1:0]配置
框5:从模式选择
经过滤波后的信号连接至ETRF引脚,CK_PSC输出,驱动计数器,TIMx_SMCR位ECE置1即可配置为外部时钟模式2
1、不使用滤波器,置TIMx_SMCR寄存器ETF[3:0] = 0000
2、设置预分频器,置TIMx_SMCR寄存器ETPS[1:0] = 01,2分频
3、选择ETR的上升沿检测,置TIMx_SMCR寄存器的ETP = 0
4、开启外部时钟模式2,置TIMx_SMCR寄存器ECE = 1
5、启动计数器,写TIMx_CR1寄存器CEN = 1
TIMx定时器从内部连接在一起,以实现定时器同步或级联,当某个定时器配置为主模式时,可对另一个配置为从模式的定时器的计数器执行复位、启动、停止操作或为其提供时钟
触发控制器用来针对片内外设输出触发信号,为其它定时器提供时钟和触发ADC/DAC转换
编码器接口专门针对编码器计数而设计
从模式控制器可以控制计数器复位、启动、递增/递减、计数
高级控制定时器的主要模块是一个16位计数器及其相关的自动重载寄存器,计数器可递增计数、递减计数或交替进行递增和递减计数,计数器的时钟可通过预分频器进行分频
计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写,即使在计数器运行时也可执行读写操作
时基单元包括:
计数器寄存器(TIMx_CNT)
预分频器寄存器(TIMx_PSC)
自动重载寄存器(TIMx_ARR)
重复次数寄存器(TIMx_RCR)
计数器最大值不一定是65535,可以通过寄存器值进行设定
三种计数模式:
一、递增(向上计数):0、1、2、……65534、65535、0、1、2……
向上计数模式:计数器从0开始计数到自动重装载值(TIMx_ARR计数器值),然后重新从0开始并产生一个计数器溢出事件,若使用重复计数器,则当递增计数的重复次数达到重复计数器寄存器中的次数+1(即TIMx_RCR+1)后,将生成更新事件(UEV);若不使用重复计数器,将在每次计数器上溢时产生更新事件
TIMx_EGR寄存器的UG(更新事件生成)位置1时,也将产生更新事件
通过软件将TIMx_CR1寄存器中的UDIS位置1可禁止UEV(更新)事件,这可避免向预装载寄存器写入新值时更新影子寄存器,在UDIS位写入0之前不会产生任何更新事件,不过,计数器和预分频计数器都会重新从0开始计数
若TIMx_CR1寄存器中的URS位 (更新请求选择)已置1,则将UG位置1会生成更新事件UEV但不会将UIF标志置1(因此,不会发送任何中断或DMA请求),这样一来,如果在发生捕获事件将计数器清零,将不会同时产生更新中断和捕获中断
发生更新事件时,将更新所有寄存器且将更新标志(TIMx_SR寄存器中的UIF位)置1(取决于URS位),此时:
1、重复计数器中将重新装载TIMx_RCR寄存器的内容
2、自动重载影子寄存器将以预装载值TIMx_ARR进行更新
3、预分频器的缓冲区将重新装载预装载值TIMx_PSC
二、递减(向下计数):65535、65534、……2、1、0.、65535、65534、……
向下计数模式:计数器从自动预装载值(TIMx_ARR计数器内容)开始递减计数直到0,然后重新从自动重装载值开始递减并生成计数器下溢事件,如此循环,若使用重复计数器,则当递减计数的重复次数达到重复计数器寄存器中次数+1(TIMx_RCR+1)后将生成更新事件(UEV),若不使用重复计数器,将在每次计数器下溢时产生更新事件
三、递增/递减(中心对齐):0、1、2、……65534、65535、65534、……2、1、0、1、2、……
中心对齐计数模式:在中心对齐模式下,计数器从0开始计数到自动重载值(TIMx_ARR寄存器内容)-1,生成计数器上溢事件,然后从自动重载值开始向下计数到1并生成下溢事件,之后从0开始重新计数,如此循环
当TIMx_CR1寄存器中CMS位不为“00”时,中心对齐模式有效,将通道配置为输出模式时,其输出比较中断标志将在以下模式下置1,即:计数器递减计数(中心对齐模式1,CMS = “01”,计数器递增模式(中心对齐模式2,CMS = “10”)以及计数器递增/递减计数(中心对齐模式3,CMS = “11”))
每次发生计数器上溢和下溢时都会生成更新事件,或将TIMx_EGR寄存器中的UG位置1也可生成更新事件,更新事件时,计数器以及预分频器计数器将重新从0开始计数
预分频器TIMx_PSC有一个输入时钟CK_PSC和一个输出时钟CK_CNT,输入时钟来源于控制器部分
CK_CNT = CK_PSC/(PSC[15:0]+1)
由于TIMx_PSC控制寄存器具有缓冲(影子寄存器),可以在运行过程中改变其数值,新的预分频值将在下一个更新事件时起作用
自动重载寄存器是预先装载的,当写或读自动重装载寄存器将访问预装载寄存器,控制器TIMx-CR1寄存器中的自动重装载预装载使能位(ARPE)若置1,预装载寄存器的内容将在每次更新事件时传递给影子寄存器;若置0,修改TIMx_ARR的值后立即生效
只有当重复计数器达到0时才会生成更新事件,意味着每当发生N+1个计数器上溢或下溢(N是TIMx_RCR重复计数器寄存器的值),数据就将从预装载寄存器转移到影子寄存器中
重复计数器在以下情况下递减:
1、递增计数模式下的每个计数器上溢
2、递减计数模式下的每个计数器下溢
3、中心对齐模式下每个计数器上溢和计数器下溢
当更新事件由软件(TIMx_EGR寄存器的UG位置1)或硬件(通过从模式控制器)生成时,无论重复计数器的值为多少,更新事件都将立即发生,并且在重复计数器中重新装载TIMx_RCR寄存器的值
输入阶段对相应的TIx(通道x)输入进行采样,生成一个滤波后的信号TIxF,接着,带有极性选择功能的边沿检测器生成一个信号(TIxFPx),该信号可用作从模式控制器的触发输入,也可用作捕获命令,该信号先进行预分频(ICxPS),而后再进入捕获寄存器
输入捕获模式下,TIMx_CHx = TIx,如TIM1_CH1 = TI1
比较输出模式下,TIMx_CHx = OCx,如TIM1_CH1 = OC1
捕获/比较通道1主电路如下所示
捕获/比较模块由一个预装载寄存器和一个影子寄存器组成,始终可通过读写操作访问预装载寄存器,在捕获模式下,捕获实际发生在影子寄存器中,然后将影子寄存器的内容复制到预装载寄存器中
在输入捕获模式下,当相应的ICx(定时器通道引脚)信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx)来锁存计数器的值,发生捕获事件时,会将相应的CCxIF标志(TIMx_SR寄存器)置1,并可发送中断或DMA请求
若发生捕获事件时CCxIF标志已处于高位,则会将重复捕获标志CCxOF(TIMx_SR寄存器)置1,可通过软件向CCxIF写入0来给CCxIF清零,或读取存储在TIMx_CCRx寄存器中的已捕获数据,向CCxOF写入“0”后会将其清零
PWM:脉冲宽度调制,也即占空比可变的脉冲波形
如上图是一个周期10ms,即频率100Hz的波形,在每个周期内,高低电平脉冲宽度各不相同,占空比是指高电平时间占整个周期的比例,如第一部分波形的占空比是40%,第二部分波形占空比是60%,第三部分波形占空比是80%
PWM输入模式就是用定时器功能测量PWM波的周期和占空比,PWM输入模式是定时器输入捕获模式的一种特例