FAQSTM定时器使用问题

STM定时器使用问题,烧录后运行不debug暂停,周期运行正常;debug暂停再启动后,定时器不工作了?
更新时间:2022.05.06 浏览量:0

解决办法,需要开启StmFreezeEnable,即开启调试暂停模式,此模式下,debug暂停后,计数器也会停止;


原因:如下图所示,STM实现周期原理为,每次进入匹配中断后,会重新更新CMP值,已实现周期中断,而这个CMP值得设定是基于上一次CMP值:

举个例子,STM的tick为1us,上次匹配值为1000,为了保持1ms的周期中断,CMP值需设置为1000 + 1000ticks,这样CNT=2000时,CMP匹配,这样就能触发中断;


而问题中,在没有设置StmFreezeEnable时debug暂停,会出现如下图情况,无法实现周期中断:

调试暂停:在CMP=CNT=3000时打了断点,这时候CNT仍在继续增加,但CMP在此时只会更新为4000

理论匹配点:因为调试暂停了,无法进入中断处理,把CMP更新为下一个匹配值5000

此处调试继续,CNT早已大于5000,不会发生匹配

此处会发生匹配,因为CNT已经溢出,重新回到5000,与CMP匹配,触发中断

    


  • 上一篇:串口DMA的最后一个字节无法发送
  • 下一篇:调用Lpuart_Uart_Ip_AsyncSend函数发送数据异常