基本定时器初始化过程中定时器总线使能的顺序问题请教?

2019-07-21 08:50发布

基本定时器TIM6和TIM7初始化时需要使能定时器时钟总线,但我发现使能总线的顺序是个问题。
一般来讲先要使能定时器总线才进行定时器相关配置,比如PSC/ARR/NVIC等等。
但如果之后需要改变PSC/ARR的值,即使修改改之前都没有使能定时器运行:TIM_Cmd(TIM6, DISABLE),修改后也没有立即使能定时器运行。但是,一经修改立马会发生一次定时器中断,没有经过定时。
我以为是偶发问题,可是却不是。

为了解决这个问题,我一条条地常识屏蔽第二次执行的初始化语句,发现了问题所在。
如果定时器总线已经使能,执行TIM_TimeBaseInit()初始化基本定时器函数就会引发一次中断。此时还没有TIM_Cmd(TIM6,ENABLE)。
如果不执行使能总线,则执行TIM_TimeBaseInit()不会引发一次中断。
我试着把使能总线语句放到TIM_TimeBaseInit的后面执行,发现第一次初始化定时器就不能工作。
但如果第一次初始化时按照一般顺序执行:先使能定时器总线再TIM_TimeBaseInit()。第二次先关闭总线,接着TIM_TimeBaseInit(),然后再使能总线。这次一切正常了。
无论之后修改多少次定时器参数都可以正常进行工作。
-------------------------------
我总结了一下,初次初始化定时器需要先使能定时器总线,之后初始化定时器可以关断和使能总线都可以,但如果不关断总线就初始化会立马产生一次中断意外。
这是什么



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
xiatianyun
1楼-- · 2019-07-21 12:06
终于解决了立刻产生中断的问题,感谢正点原子。
原帖是:http://www.openedv.com/forum.php ... 6%F7%2B%D6%D0%B6%CF
不过如何用一个定时器连续产生不同的定时时长还没有测试是否一起被解决。
正点原子
2楼-- · 2019-07-21 12:56
貌似都有这个现象。。。
xiatianyun
3楼-- · 2019-07-21 15:08
如果使用同一个定时器进行连续两个不同的定时操作,一个定时t1到后修改参数成为定时t2,似乎也不成功。

一周热门 更多>