简单介绍
在上篇文章中讲述了如何把GPIO的端口绑定到TIM上,接下来讲一下如何设置TIM的配置。
过程总览
– 设置prescaler(预分频器)
– 设置the auto-reload(自动重制)
– 设置direction/mode of the counter(计数的方向)
– 设置output compare mode(输出选择比较方式)
– 打开频道连接到端口
– 打开 timer的计数器
1.预分频器
预分频器就是重复一个计数轮回的次数。代码表述如下:
TIM3->PSC = 12000 – 1;//重复轮回的次数为12000,因为是从0 开始的所以0-11999为12000.
由于TIM的最大频率是48Mhz,所以要得到想要的频率,就要通过运算得知预分频器和计数的值。
下面是公式
想要的频率 = 48 000 000 / ((TIM3->PSC + 1 )*(TIM3->ARR + 1 )
TIM3->ARR这个会在接下来进行介绍。
2.自动重制
自动重制的值为一个计数器从0数到的值。代表计数器达到这个值以后下一位就会清零。TIM3->ARR = 4000 – 1;
和上面的代码结合起来就可以了解到,这两个值和想到得到的TIM频率的乘积就是TIM的最大乘积48Mhz。
3.计数器初始值
这个值决定了计数器的开始值,通过改变不同频道的初始值可以让相同事件以不同的时间但是相同的频率运行。
TIM3->CCR3 = 3456;
当一个完整的频率完成的时候,将会输出一个CK_CNT给输出
4.输出的模式
stm32TIM输出的模式大概主要的有8种:通过不同的凡是输出的信号也会有不同。
0000: 输出冻结,没有任何事发生。
0001: 当CNT(计数比较值)的值等于计数的值,输出将变成高平电压。
0010: 当CNT的值(计数比较值)的值等于计数的值,输出将变成低平电压。
0011: 当CNT的值(计数比较值)的值等于计数的值,输出将与当前相反。
0100: 强制低平电压,且永远不会发生改变。
0101: 强制高平电压,且永远不会发生改变。
0110: PWM输出模式1,如果计数是往上数的,如果自己当得到的频率的值小于计数的值,高平电压。其他的低平电压。
如果计数是往下数的,如果自己当得到的频率的值大于计数的值,高平电压。其他的低平电压
0111: PWM输出模式2,如果计数是往上数的,如果自己当得到的频率的值大于等于计数的值,高平电压。其他的低平电压。
如果计数是往下数的,如果自己当得到的频率的值大于计数的值,高平电压。其他的低平电压。
然后模式的选择在输出比较模式的寄存器。
代码如下:
举例:选择0011
TIM3->CCMR2 &= TIMCCMR2_OC3M2; //把位数2的值清零,因为有可能先前赋的值没有清零。
TIM3->CCMR2 |= TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0;//给位数1,0的值清零,因为有可能先前赋的值没有清零。
5. 启动
当上面的配置设置好了以后,就可以启动计数器了,让TIM生效。
以上就是stm32 TIM功能的介绍及实现。