全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn
野火视频教程优酷观看网址:http://i.youku.com/firege
本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。
学习本章时,配合《STM32F4xx 中文参考手册》高级定时器章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。
特别说明,本书内容是以STM32F42x系列控制器资源讲解。
上一章我们讲解了基本定时器功能,基本定时器功能简单,理解起来也容易。高级控制定时器包含了通用定时器的功能,再加上已经有了基本定时器基础的基础,如果再把通用定时器单独拿出来讲那内容有很多重复,实际效果不是很好,所以通用定时器不作为独立章节讲解,可以在理解了高级定时器后参考《STM32F4xx中文参考手册》通用定时器章节内容理解即可。
32.1 高级控制定时器
高级控制定时器(TIM1和TIM8)和通用定时器在基本定时器的基础上引入了外部引脚,可以输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。这几个功能在本书不做详细的介绍,主要介绍常用的输入捕获和输出比较功能。
高级控制定时器时基单元包含一个16位自动重载计数器ARR,一个16位的计数器CNT,可向上/下计数,一个16位可编程预分频器PSC,预分频器时钟源有多种可选,有内部的时钟、外部时钟。还有一个8位的重复计数器RCR,这样最高可实现40位的可编程定时。
STM32F429IGT6的高级/通用定时器的IO分配具体见表 01。配套开发板因为IO资源紧缺,定时器的IO很多已经复用它途,故下表中的IO只有部分可用于定时器的实验。
表 01 高级控制和通用定时器通道引脚分布
|
高级控制 |
通用定时器 |
||||||||||
TIM1 |
TIM8 |
TIM2 |
TIM5 |
TIM3 |
TIM4 |
TIM9 |
TIM10 |
TIM11 |
TIM12 |
TIM13 |
TIM14 |
|
CH1 |
PA8/PE9/PC9 |
PC6/PI5 |
PA0/PA5/PA15 |
PA0/PH10 |
PA6/PC6/PB4 |
PD12/PB6 |
PE5/PA2 |
PF6/PB8 |
PF7/PB9 |
PH6/PB14 |
PF8/PA6 |
PF9/PA7 |
CH1N |
PA7/PE8/PB13 |
PA5/PA7/PH13 |
|
|
|
|
|
|
|
|
|
|
CH2 |
PE11/PA9 |
PC7/PI6 |
PA1/PB3 |
PA1/PH11 |
PA7/PC7/PB5 |
PD13/PB7 |
PE6/PA3 |
|
|
PH9/PB15 |
|
|
CH2N |
PB0/PE10/PB14 |
PB0/PB14/PH14 |
|
|
|
|
|
|
|
|
|
|
CH3 |
PE13/PA10 |
PC8/PI7 |
PA2/PB10 |
PA2/PH12 |
PB0/PC8 |
PD14/PB8 |
|
|
|
|
|
|
CH3N |
PB1/PE12/PB15 |
PB1/PB15/PH15 |
|
|
|
|
|
|
|
|
|
|
CH4 |
PE14/PA11 |
PC9/PI2 |
PA3/PB11 |
PA3/PI0 |
PB1/PC9 |
PD15/PB9 |
|
|
|
|
|
|
ETR |
PE7/PA12 |
PA0/PI3 |
PA0/PA5/PA15 |
|
PD2 |
PE0 |
|
|
|
|
|
|
BKIN |
PA6/PE15/PB12 |
PA6/PI4 |
|
|
|
|
|
|
|
|
|
|
32.2 高级控制定时器功能框图
高级控制定时器功能框图包含了高级控制定时器最核心内容,掌握了功能框图,对高级控制定时器就有一个整体的把握,在编程时思路就非常清晰,见图 01。
关于图中带阴影的寄存器,即带有影子寄存器,指向左下角的事件更新图标以及指向右上角的中断和DMA输出标志在上一章已经做了解释,这里就不再介绍。
图 01 高级控制定时器功能框图
1. ①时钟源
高级控制定时器有四个时钟源可选:
内部时钟源CK_INT
外部时钟模式1:外部输入引脚TIx(x=1,2,3,4)
外部时钟模式2:外部触发输入ETR
内部触发输入
内部时钟源(CK_INT)
内部时钟CK_INT即来自于芯片内部,等于180M,一般情况下,我们都是使用内部时钟。当从模式控制寄存器TIMx_SMCR的SMS位等于000时,则使用内部时钟。
外部时钟模式1
图 02 外部时钟模式1框图
①:时钟信号输入引脚
当使用外部时钟模式1的时候,时钟信号来自于定时器的输入通道,总共有4个,分别为TI1/2/3/4,即TIMx_CH1/2/3/4。具体使用哪一路信号,由TIM_CCMx的位CCxS[1:0]配置,其中CCM1控制TI1/2,CCM2控制TI3/4。
②:滤波器
如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对ETRP信号重新采样,来达到降频或者去除高频干扰的目的,具体的由TIMx_CCMx的位ICxF[3:0]配置。
③:边沿检测
边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效,具体的由TIMx_CCER的位CCxP和CCxNP配置。
④:触发选择
当使用外部时钟模式1时,触发源有两个,一个是滤波后的定时器输入1(TI1FP1)和滤波后的定时器输入2(TI2FP2),具体的由TIMxSMCR的位TS[2:0]配置。
⑤:从模式选择
选定了触发源信号后,最后我们需把信号连接到TRGI引脚,让触发信号成为外部时钟模式1的输入,最终等于CK_PSC,然后驱动计数器CNT计数。具体的配置TIMx_SMCR的位SMS[2:0]为000即可选择外部时钟模式1。
⑥:使能计数器
经过上面的5个步骤之后,最后我们只需使能计数器开始计数,外部时钟模式1的配置就算完成。使能计数器由TIMx_CR1的位CEN配置。
外部时钟模式2
图 03 外部时钟模式2框图
①:时钟信号输入引脚
当使用外部时钟模式2的时候,时钟信号来自于定时器的特定输入通道TIMx_ETR,只有1个。
②:外部触发极性
来自ETR