因为我的这种情况参见stm32单片机TIM3定时器中断与usart串口初始化冲突-CSDN博客,一般其他优秀的程序员不会这样做:除非在设计上允许自由运行(freerun),否则tim初始化不包括tim_cmd(tim,enable),也不包括nvic的设置
较为正确的初始化过程:
按顺序,首先在deinit外设之后,此时外设会确定地在无效状态,包括中断,然后先设置nvic,只一次;接着设置外设,比如tim和usart,但设置后这些外设都不在运行状态,设置好之后等待运行。所有外设设置好之后,再统一按要求顺序enable各个外设
为安全起见,通常外设比如tim,尽管此时还没运行,在设置它中断使能前,先清除一次中断标志
这样可以防止因为设置动作产生中断标志
而在正常运行时更改中断,就需要十分小心了,主要是需要防止“在你更改中断设置时,某些中断已经可能发生”
就如我的程序,当设置捕获中断允许时,你必须假设在设置的下一条指令就可以发生中断,而发生中断之后的运行动作,必须是你预期好的,因此这个时刻必须是必须的后续外设都已经合适地初始化和正常运行、等待它
于是,就取决于你的具体编程逻辑了:假设捕获中断时由中断引发计算并把结果通过usart发送,显然在enable这个捕获中断前,usart必须已经初始化好并且等待发送,否则出什么问题,你得处理好了。