stm32之通用定时器TIM
STM32系列的CPU,有多达8个定时器;
1、其中TMI1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动;它们的时钟有APB2的输出产生;
2、其它6个为普通定时器,时钟由APB1的输出产生;
定时器的作用:
1、定时功能 2、计数功能 3、输入捕获 4、匹配输出 5、PWM脉冲波输出
概述:
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输出比较和PWM)。
定时器是完全独立的,而且没有互相共享任何资源。它们可以一起同步操作;
注意点:只要使用默认的库配置方式配置时钟为72M,无论TIM1还是TIMX,它们的计数频率都是72M;
主要特性
通用TIMx定时器特性包括:
16 位向上,向下,向上/向下自动装载计数器
16 位可编程预分频器,计数器时钟频率的分频系数为1~65535 之间的任意数值
4个独立通道:
─ 输入捕获
─ 输出比较
─ PWM生成(边缘或中间对齐模式)
─ 单脉冲模式输出
使用外部信号控制定时器和定时器互连的同步电路
如下事件发生时产生中断/DMA:
─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动,停止,初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较
定时器时钟系统:
定时器的时钟不是直接来自APB1或APB2,而是来自输入为APB1或APB2的一个倍频器;
APB1不但要为TIM2-7提供时钟,而且还要为其他外设提供时钟;设置这个倍频器可以保证其他外设使用较低时钟频率时,TIM2-7扔能得到较高的时钟频率;
连接引脚:
时钟选择:
例如,要配置向上计数器在T12输入端的上升沿计数(外部计数功能配置),使用下列步骤配置:
1、配置TIMx_CCMR1寄存器CC2S=01,配置通道2检测TI2输入的上升沿;
2、配置TIMx_CCMR1寄存器的IC2F[3:0],选择输入滤波器带宽(如果不需要滤波,设置IC2F=0000)
3、配置TIMX_CCER寄存器CC2P=0,选定上升沿极性;
4、配置TIMx_SMCR寄存器的SMS=111,选择定时器外部时钟模式1;
5、配置TIMx_SMCR寄存器中的TS=110,选定TI2作为触发输入源;
6、设置TIMx_CR1寄存器的CEN=1,启动计数器;
当上升沿出现在TI2,计数器计数一次,且TIF标志被设置;
当TI2的上升沿和计数器实际时钟之间的延时取决于TI2的输入端的重新同步电路;
功能选择:
如果时钟源采用内部时钟,则可以精准定时;
如果时钟源采用外部脉冲输入,则可以完成计数功能;
实例:
定时器实验:
通过配置定时器相关寄存器,实现定时器2每1s中断一次,通过数码管将时间实时显示出来;
引导:
1、利用TIM_DeInit()函数将Timer设置为默认缺省值;
2、TIM_InternalClockConfig()选择TIMx来设置内部时钟源;(时钟源的来源有三种:1、内部时钟,可以分频,比较准确;2、外部脉冲输入;3、其他定时器分频)
3、TIM_Perscaler来设置预分频系数;(内部时钟太快了;一般要分频)
4、TIM_ClockDivision来设置时钟分割;
5、TIM_CounterMode来设置计数器模式;(向上计数/向下计数/中央模式)
6、TIM_Period来设置自动装入的值;(初值)
7、TIM_ARRPerloadConfig()来设置是否使用预装载缓冲器;(影子寄存器是否直通)
8、TIM_ITConfig()来开启TIMx的中断;
具体参见代码;