温柔的熊-350720 发表于 2020-2-28 16:14:22

运行中更改定时器定时时间值

各位大神,定时器相信大家都常用到,问下,如何在程序运行时,动态改变定时器的定时时间值。
比如,定时器定时时间到,控制的灯就点亮或者熄灭,a为定时器的定时时间值,如果在程序运行过程中,改变a的赋值,这个定时器的定时时间也会自动跟着延长或者减小,
这个定时器赋值,如何实现啊???
请有知道的大神指点指点


wenyangzeng 发表于 2020-2-28 21:24:41

设置TIMx的控制寄存器TIMx_CR1的D7位(APRE)为1,则改变自动重加载寄存器(TIMx_ARR)的值,即可更新定时器新的定时值。



stm1024 发表于 2020-2-29 16:51:27

你初始化的时候不是有给定时器配置周期吗?那个怎么搞,这里就怎么搞,从稳妥角度考虑,建议在修改前,先把定时器关闭,把相应的中断也给关闭了,配置完了再打开。

likang1202 发表于 2020-2-29 19:20:27

按道理说直接改寄存器就可以

aiherong 发表于 2020-3-1 05:06:56

int a =初始值;a +=增量; 或 a-=增量; 然后将下一行代码加入你想要的位置:
*(volatile unsigned int *)(TIMx_BASE +0x28)=a ; 其中TIMx具体到某一定时器

butterflyspring 发表于 2020-3-3 11:32:31

二楼的建议,用定时器预装载功能吧,否则在修改定时器寄存器时恰巧计数值到了就产生冲突。当然预装载是一种安全模式,但是产生作用是下一个周期。所以最终取决你的定时时间长短。如果很长的话,直接用软件计数就好了。:)
页: [1]
查看完整版本: 运行中更改定时器定时时间值