一、简介: 不同的STM32系列有不同数量的定时器,针对现在学习的STM32F40x系列总共有14个定时器,针对这14个定时器可以将其分为3类,高级定时器、通用定时器和基本定时器,三种定时器大同小异,下边会针对通用定时器来介绍定时器的原理和应用。对于通用定时器根据位数和计数方式的不同又可以分为3类,相关分类的图表如下: 二、应用: 1、更新:计数器的上溢或下溢。2、事件触发。3、输入捕获。4、输出比较。5、支持针对定位的增量编码和霍尔传感器电路。5、触发输入作为外部时钟或按周期电源管理。下边会针对部分应用做相关介绍和代码分析。 三、框图: 下图是通用定时器TIM2~TIM5的框图,其他定时器的框图和该框图是类似的,只不过是在该框图的基础上做相应的裁剪做出小的变动。 下边对定时器的框图做相关拆解,并对各个部分做相关分析。 四、时钟选择及分频: 这部分的功能由框图的如下图部分产生: 由图中可以发现时钟来源有:1、内部时钟(CK_INT)。2、外部时钟模式1;外部引脚TIx,由输入捕获部分产生。3、外部时钟模式2;外部触发输入ETR。4、内部触发输入ITRx,该时钟是由另一个定时器输出产生的,对应到框图中的TRGO。经过相应的选择后产生时钟CK_PSC。 这部分同时会在相关寄存器设定计时器的计数模式、复位和使能等相关操作。 五、时基单元 时基单元框图如下: 其中包括:1、PSC预分频器;负责对选择的时钟CK_PSC分频,产生最终计数器用到的时钟CK_CNT。2、CNT计数器:负责计数,做为定时器的核心单元。3、自动重载寄存器:负责在相关事件触发后,将寄存器中的值装载到计时器中。 六、输入捕获 对输入捕获功能的基本描述就是;通过检测TIM_CHx上的边沿信号,在信号跳变时,将当前计数器的值存放到相应的捕获/比较寄存器中。该功能部分在框图中如下图所示: 其实这是定时器的4个相关通道,拿出其中一个做相关分析,其中一个通道的框图如下: TI1为通道输入信号,经过滤波后产生TI1F,再经过边沿检测(上升沿或下降沿),再经过相关选择后产生的信号通过分频器分频后产生最后需要捕获的信号。 对于输入捕获相关库函数介绍如下; [cpp] view plain copy
print?
- void TIM_ICInit(TIM_TypeDef* TIMx,TIM_ICInitTypeDef* TIM_ICInitStruct); //设置通道的相关参数。
- void TIM_OCxPolarityConfig(TIM_TpeDef* TIMx,uint16_t TIM_OCPolarity); //通道极性设置。
- uint32_t TIM_GetCapturex(TIM_TypeDef* TIMx); //获取通道捕获值。
|