1 前言
前几期内容中我们都采用了STM32的定时器功能,而再早之前也有一期定时器的理论介绍。因此本期我们介绍基于CubeMX的STM32定时器的使用。
2 CubeMX
在CubeMX中配置定时器首先要关注的是功能配置。Slave Mode使定时器(定时器通道)可以依赖另一个外部信号作为触发源,而不是独立运行。(不做过多介绍)。
Clock Source也就是时钟源,它决定了定时器计数时钟,我们通常会使用Internal Clock也就是内部时钟源。
从时钟树中我们可以看到,定时器的时钟由APB2TimerClocks提供,该时钟源来自HCLK主时钟仅分频获得。在正常情况下和HCLK保持一致。
Channel用于配置通道特殊功能大体有四类:
输入捕获,输出比较模式,PWM模式以及强制输出模式。每一个Channel都是对应着具体引脚的。
例如PA1对应着TIM2的Channel2以及TIM5的Channel2,当我们配置TIM2的Channel2为PWM输出时,实际代表着PA1输出PWM。
当我们的Clock Source选择好之后(通常选择内部时钟)接着就是进入参数配置。
首当其冲的分频系数:Prescaler。这个参数字面理解就是决定对定时器时钟分频。计数频率计算公式为:TimerClock/(Prescaler+1)。
例如当我的TimerClock设置为170MHZ时,PRC设置为170-1,这样子根据公式可以得到计数频率为1MHZ即每秒钟计数值加1M次(1us加一次)。
其次是计数器周期:Counter Period。这个参数决定着定时器单次周期的计数最大值,当计数超出这个值会出现“溢出”。溢出则可以发生中断,触发中断回调函数等等~
因此定时器的一个周期可以计算为:
TimerClock/(Prescaler+1)/(Counter Period)。假设我们的分频系数设置为170-1,主频为170MHZ,计数器周期设置为1000。这样子定时器的每次溢出时间就是1ms,就可以实现1ms定时的功能了。
Trigger Output触发输出也是定时器非常关键的一个功能。它用于输出外部触发信号,用来同步其他外部设备或触发其他定时器。例如我们的DMA什么时候搬运数据,触发源可以来自定时器的这部分,这样子我们就可以实现定时搬运数据,实现定采样率的ADC采集,或者定周期的DAC输出。
最后别忘记了开启定时器中断,没有这些中断,就无法调用定时器中断回调函数。
3 PWM模式
我们可以看到,定时器总共有四种模式,其实总结就是四种输出模式。
PWM Genneration No Output顾名思义就是开启PWM但是不具体输出,没有输出波形,但是内部保留PWM的功能,它主要是作为一些内部用于其他外设的触发信号功能,这里不做过多介绍。
PWM Genneration CH1即正常的PWM输出,由具体某个引脚输出PWM波形。
CH1N的N应该是反向通道的意思,它会输出和CH1极性相反的波形。需要注意的是,前面我们说过某个Channel通道都对应着具体的引脚,实际上CH1和CH1N是两个不同的引脚。
当我们开启PWM Generation CH1 CH1N的时候,就会同时开启这两个通道,它们会输出一对相反的波形,这个特性常常被应用于全桥驱动上。
防止某对MOS管被同时导通,用这种方式可以在防止同时输出高电平或者低电平。
当我们开启PWM模式后,需要了解的最重要的参数就是Pulse(脉冲),这个值决定着PWM的占空比通常我会叫做比较值(CCR)。在PWMmode1情况下假如我们的定时器周期值设置为1000。当计数值(CNT)小于CCR时,会根据CH Polarity(如果是High)就会输出高电平。当CNT>CCR时就会输出低电平。到达1000时就会重新计数,这样子就完成了一个周期PWM波的输出。
所以会把CCR认为是一个比较值,而不是所谓的占空比,它的值决定了占空比,但是却不是占空比本身。占空比的计算:CCR/Counter Period(ARR+1)。(依据设置模式改变)。
4 下期介绍
篇幅过长,下期我们再接着介绍定时器剩下的两种功能。