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

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(),然后再使能总线。这次一切正常了。
无论之后修改多少次定时器参数都可以正常进行工作。
-------------------------------
我总结了一下,初次初始化定时器需要先使能定时器总线,之后初始化定时器可以关断和使能总线都可以,但如果不关断总线就初始化会立马产生一次中断意外。
这是什么



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。