STM32 TIM控制器
一、基本定时器
1. 时钟源(内部时钟CK_INT)
基本定时器(TIM6和 TIM7)的时钟源来源于APB1总线时钟。
使能TIM6或TIM7时钟:
2. 预分频器(PSC)
负责对定时器输入时钟进行分频,它的主要作用是通过降低定时器的输入时钟频率,为定时器的计时和定时功能提供更灵活的时间控制。 TIMx_PSC寄存器是定时器的预分频器寄存器,用于设置定时器的预分频因子,分频因子决定了定时器的时钟频率。需要注意的是实际的分频值是TIMx_PSC+1,例如,当TIMx_PSC寄存器的值为0时,实际的分频因子的大小为 0 + 1 = 1。
3. 计数器
计数器通过对输入时钟(由预分频器分频后的时钟信号),记录经过的时间。计数器的计数模式有三种,递增计数、递减计数、中央对齐计数,但是,基本定时器仅支持递增模式。
4. 自动重装载器
控制计数器的最大计数值,从而影响定时器的溢出时间和功能行为。
TIMx_ARR是自动重装载器的重装载值寄存器,当TIMx_CNT寄存器等于TIMx_ARR寄存器时,计数器上溢,TIMx_CNT寄存器的值自 动重置为 0,同时产生一个UEV更新信号。
UEV事件的产生:
可能产生UEV事件的信号来源:
- 计数器上溢 (TIMx_CNT寄存器值==TIMx_ARR寄存器值)
- 手动产生 (将TIMx_EGR.UG位写1)
产生UEV事件的信号来源是否可以产生一个UEV的更新事件,取决于TIMx_CR1.UDIS位域。 TIMx_CR1.UDIS为0时,允许产生更新事件;TIMx_CR1.UDIS为1时,则禁止产生UEV事件。
二、通用定时器
STM32F4xx系列的通用定时器有10个:
通用定时器TIM2到TIM5的框图
- 时钟源
- 控制器
- 时基单元
- 输入控制
- 输入捕获/输出比较
- 输出控制
通用定时器TIM9和TIM12的框图
通用定时器TIM10/TIM11和 TIM13/TIM14的框图
使用通用定时器进行定时
选择时钟源为内部时钟源(CK_INT),通过TIMx_SMCR寄存器下的SMS设置为000,并且要保证ECE位为0.
对时钟源CK_INT进行预分频:通过TIMx_PSC设置预分频系数,注意:实际的预分频系数= TIMx_PSC+ 1
设置计数器计数模式:TIMx_CR1.DIR和TIMx_CR1.CMS共同作用,决定计数器的计数模式。
设置自动重装载器的值:TIMx_ARR寄存器设置。TIMx_ARR寄存器的值更新到实际生效的影子寄存器的方式有两种,取决于TIMx_CR1.ARPE
手动产生一个更新事件TIMx_EGR.UG,然后使能计数器时钟TIMx_CR1.CEN。
PWM(Pulse Width Modulation)简称脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的 一种非常有效的技术,广泛应用在测量、通信、工控等方面。
PWM的频率是指在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位Hz。
PWM的周期T=1/f,T是周期,f是频率。 如果频率为50Hz ,那么一个周期是20ms。
占空比是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是% (0%-100%)
PWM模式1
- 在递增计数模式下,只要TIMx_CNT<TIMx_CCR1,通道1便为有效状态(OC1REF=1),否则为无效状态 (OC1REF=0)。
- 在递减计数模式下,只要TIMx_CNT>TIMx_CCR1,通道1便为无效状态(OC1REF=0),否则为有效状态 (OC1REF=1)。
PWM模式2
- 在递增计数模式下,只要TIMx_CNT<TIMx_CCR1,通道1便为无效状态(OCxREF=0),否则为有效状态 (OCxREF=1)。
- 在递减计数模式下,只要TIMx_CNT>TIMx_CCR1,通道1便为有效状态(OCxREF=1),否则为无效状态 (OCxREF=0)。
PWM中断
当TIMx_CNT=TIMx_CCR1时,TIMx_SR寄存器“捕获/比较中断标志(CC1IF)”置1,如果CC1中断使能还会触发捕获/比较中断。
当计数器发生溢出时,如果TIMx_CR1寄存器UDIS为0允许UEV更新,“更新中断标志(UIF)”置1,如果UIE中断使能还会触发更新中断。
