滴答时钟(SysTick)在STM32中确实被配置为每1ms产生一次中断,但这并不意味着每次计时1ms都必须中断以更新毫秒数。不过,在标准的配置和使用方式下,SysTick定时器确实是以这种方式工作的。
工作原理
SysTick是一个24位的倒计时定时器,它依赖于系统时钟信号。每接收到一个时钟信号,计数器就会加1。当计数器的值达到0时,SysTick重装载寄存器会自动重新装载预设的初值(在STM32 HAL库中,这个初值通常被设置为产生1ms中断的对应值)。同时,SysTick会触发一个中断,表明一个计时周期已经结束。
中断处理
在中断服务程序(ISR)中,通常会执行一些与计时相关的操作,比如更新全局的时间变量、处理定时任务等。但是,这些操作并不是必需的,它们完全取决于应用程序的需求。
更新毫秒数
如果应用程序需要跟踪毫秒级的时间(比如实现一个精确的延时函数),那么它可能会在SysTick的中断服务程序中更新一个全局的毫秒数变量。这样,每次SysTick中断发生时,这个变量就会增加1,从而反映出时间的流逝。
然而,如果应用程序不需要这种精确的时间跟踪,那么它就可以忽略SysTick中断中的这部分操作。在这种情况下,SysTick中断仍然会每1ms发生一次,但中断服务程序可能只会执行一些简短的操作(比如检查某个条件是否满足),而不会更新毫秒数变量。
性能影响
SysTick中断的频繁发生确实可能会对主程序的运行产生一定的影响。但是,由于中断服务程序通常都很简短(微秒级别),因此这种影响通常是微不足道的。在大多数情况下,开发者可以安全地依赖SysTick定时器来提供精确的时间基准,而无需担心它会显著影响主程序的性能。
结论
滴答时钟(SysTick)在STM32中确实是以每1ms产生一次中断的方式工作的。但是否需要在每次中断中更新毫秒数变量则完全取决于应用程序的需求。如果不需要精确的时间跟踪,那么可以省略这部分操作以减少中断服务程序的开销。