stm32 C编程入门记录(2) Timers(下)

本文是STM32 C编程入门系列的第二部分,聚焦于TIMers的配置,包括预分频器的设置、自动重置、计数器初始值、输出模式的选择以及启动计数器的步骤。通过实例解析了不同输出模式的含义,并详细介绍了如何启动计数器,使TIM生效。

在上篇文章中讲述了如何把GPIO的端口绑定到TIM上,接下来讲一下如何设置TIM的配置。

过程总览

– 设置prescaler(预分频器)
– 设置the auto-reload(自动重制)
– 设置direction/mode of the counter(计数的方向)
– 设置output compare mode(输出选择比较方式)
– 打开频道连接到端口
– 打开 timer的计数器

1.预分频器

预分频器就是重复一个计数轮回的次数。代码表述如下:

TIM3->PSC = 120001;//重复轮回的次数为12000,因为是从0 开始的所以0-11999为12000.

由于TIM的最大频率是48Mhz,所以要得到想要的频率,就要通过运算得知预分频器和计数的值。
下面是公式
想要的频率 = 48 000 000 / ((TIM3->PSC + 1 )*(TIM3->ARR + 1 )

TIM3->ARR这个会在接下来进行介绍。

2.自动重制

自动重制的值为一个计数器从0数到的值。代表计数器达到这个值以后下一位就会清零。

TIM3->ARR = 40001;

和上面的代码结合起来就可以了解到,这两个值和想到得到的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 &= ~TIM_CCMR2_OC3M_2; //把位数2的值清零,因为有可能先前赋的值没有清零。
TIM3->CCMR2 |= TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0;//给位数1,0的值清零,因为有可能先前赋的值没有清零。
5. 启动

当上面的配置设置好了以后,就可以启动计数器了,让TIM生效。

以上就是stm32 TIM功能的介绍及实现。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值