情况是这样的外部中断检测到上升沿,进入中断将TIM打开,拉高PD3。然后TIM溢出进入中断拉低PD3并关闭TIM。实现一个脉冲信号,用定时器的定时时长决定这个脉冲的宽度,但是这个脉冲宽度在不停变化如上图
有什么办法可以避免出现这种情况吗?
没办法避免这个现象。
STM32 CPU 指令执行周期不是固定的,有的汇编指令执行的长,有的汇编指令执行的短。
定时器中断(或其他类型的中断),在中断信号触发中断时,需要等CPU的当前汇编指令执行完成,才跳转到中断服务程序。由于在中断触发时,当前的汇编指令并不固定,汇编指令执行的时间也不固定,就会使中断程序的进入时间有抖动。就会出现你这个现象。
状态读取和控制直接寄存器操作,中断里不要用库函数和库指令