[STM32C0] 如何避免STM32C0 SysTick定时任务误差?

[复制链接]
1039|55
gejigeji521 发表于 2026-1-25 12:28 | 显示全部楼层
SysTick 是内核中断,若有更高优先级中断正在执行,SysTick 中断会被阻塞,导致定时回调执行延后。
heisexingqisi 发表于 2026-1-27 18:14 | 显示全部楼层
SysTick 是 24 位递减计数器,基于内核时钟(HCLK),若时钟配置不稳定(如分频、倍频误差),会直接导致计数基准不准。
zhuotuzi 发表于 2026-2-1 15:39 | 显示全部楼层
SysTick 中断响应延迟:中断优先级、其他中断抢占会导致定时任务执行滞后
xinxianshi 发表于 2026-2-3 11:30 | 显示全部楼层
SysTick 计数溢出的响应延迟:SysTick 中断触发后,CPU 可能因更高优先级中断、指令执行等原因延迟进入中断服务函数,导致定时基准偏移。
heisexingqisi 发表于 2026-2-6 15:38 | 显示全部楼层
SysTick 中断优先级过低,被高优先级中断抢占,导致定时回调执行延迟。
cemaj 发表于 2026-2-6 16:55 | 显示全部楼层
实际的任务逻辑放在main函数的while(1)循环中,通过检查标志位来执行。这确保了即使任务执行时间有波动,也不会影响下一个SysTick中断的准时触发。
10299823 发表于 2026-2-7 11:11 | 显示全部楼层
使用内部 RC 振荡器,频率漂移大
lzmm 发表于 2026-2-7 12:28 | 显示全部楼层
对于 ≤1ms 精度要求,SysTick + 主循环标志位完全够用
juliestephen 发表于 2026-2-7 13:17 | 显示全部楼层
SysTick可以使用内核时钟或外部参考时钟。如果HCLK由内部RC振荡器产生,其本身精度就会引入误差。
mickit 发表于 2026-2-7 14:21 | 显示全部楼层
使用 HSE,不用 HSI              
jackcat 发表于 2026-2-7 15:37 | 显示全部楼层
即使使用PLL倍频,只要PLL的参考源是HSE,系统时钟HCLK(以及SysTick)就能保持高精度。
xiaoyaodz 发表于 2026-2-7 16:30 | 显示全部楼层
如果需要多个高精度定时或PWM,这是最佳选择。
hilahope 发表于 2026-2-7 19:30 | 显示全部楼层
果SysTick中断服务程序中的任务执行时间超过SysTick的定时周期,会严重打乱定时节奏。
sanfuzi 发表于 2026-2-7 20:17 | 显示全部楼层
使用 HSE 作为系统时钟源。              
updownq 发表于 2026-2-7 20:42 | 显示全部楼层
更高优先级的中断会抢占SysTick中断,导致任务执行时间点漂移。
biechedan 发表于 2026-2-7 21:08 | 显示全部楼层
硬件定时器是独立的外设,即使内核被高优先级任务阻塞,它也能准时触发中断。
albertaabbot 发表于 2026-2-8 08:18 | 显示全部楼层
优化软件架构与中断处理              
minzisc 发表于 2026-2-8 08:46 | 显示全部楼层
若使用 HSI,误差可达 ±1%~2%,不适合高精度定时。
jiekou001 发表于 2026-2-8 09:35 | 显示全部楼层
SysTick 默认使用内核时钟(HCLK),若 HCLK 受外部晶振、倍频器不稳定影响,会直接导致定时偏差;
wangdezhi 发表于 2026-2-8 13:22 | 显示全部楼层
在 SystemClock_Config() 中,优先使用 HSE 并通过 PLL 倍频到 48MHz。外部晶振的精度通常在 ±10ppm - ±50ppm,误差极小,可以忽略不计。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0