我还是觉得Deadline_Zero 不一定只有几十毫秒。
程序执行是这样的:初始化时,定时器1使能,开始计数,当符合启动条件时,执行一次 void BLDC_Start(int32_t Duty) ,在函数里执行语句 TIMER1->CMPR = TIMER1->DR + 2000 ; 这时的定时器计数有可能到了8s时刻,此刻定时器1还未中断,程序继续执行,当计数到TIMER1->CMPR 时定时器1中断,此时的TIMER1->DR值有可能在8-8.88s之间,然后执行 PeriodLast = (TIMER1->DR - ZeroTick) & 0xFFFFFF ;
此时的PeriodLast 就非常大,下一次中断while循环就不是毫秒的等待了,而是秒级的。
不知道分析的对不对?
|