[STM32L0] SysTick做延时是不是不太准?

[复制链接]
762|19
 楼主| Uriah 发表于 2025-5-3 07:22 | 显示全部楼层 |阅读模式
感觉用它定1ms会飘,尤其开中断多的时候,是不是得换别的定时器?
Clyde011 发表于 2025-5-3 07:24 | 显示全部楼层
感觉SysTick更适合节拍,不适合测量。
公羊子丹 发表于 2025-5-3 07:25 | 显示全部楼层
有中断抢占的话确实不太准。
周半梅 发表于 2025-5-3 07:26 | 显示全部楼层
SysTick只适合大致延时,不适合定时。
帛灿灿 发表于 2025-5-3 07:27 | 显示全部楼层
定时建议用TIM2或TIM21。
童雨竹 发表于 2025-5-3 07:27 | 显示全部楼层
低功耗下SysTick可能不工作。
万图 发表于 2025-5-3 07:28 | 显示全部楼层
我测过偏差在10%左右。
Wordsworth 发表于 2025-5-3 07:29 | 显示全部楼层
用DWT周期计数器精度更高。
Bblythe 发表于 2025-5-3 07:30 | 显示全部楼层
SysTick是基于系统时钟的,时钟变了也影响。
Pulitzer 发表于 2025-5-3 07:30 | 显示全部楼层
我都拿它做tick,延时另开定时器。
 楼主| Uriah 发表于 2025-5-3 07:32 | 显示全部楼层
加了OS之后tick的粒度也会变粗。
淡漠安然 发表于 2025-5-14 18:53 | 显示全部楼层
SysTick作为内核定时器(优先级通常为最低),若被更高优先级中断(如外部中断、DMA传输完成中断)频繁抢占,会导致延时累积误差

暖了夏天蓝了海 发表于 2025-5-14 18:56 | 显示全部楼层
优化SysTick延时(推荐轻量级场景)关闭SysTick中断:仅用于忙等待延时,避免被其他中断抢占

光辉梦境 发表于 2025-5-14 19:30 | 显示全部楼层
其实SysTick在中断服务期间暂停计数,返回后继续执行,但中断处理时间未被补偿

江河千里 发表于 2025-5-14 20:00 | 显示全部楼层
时钟源依赖性,SysTick默认使用内核时钟(HCLK),若时钟配置动态变化(如通过PLL切换频率),需手动更新重装载值(SysTick->LOAD),否则延时将线性漂移

三生万物 发表于 2025-5-14 20:50 | 显示全部楼层
传统SysTick延时函数(如HAL_Delay)通过循环查询SysTick->VAL实现,会阻塞CPU执行其他任务,降低系统实时性

夜阑风雨 发表于 2025-5-14 21:12 | 显示全部楼层
缺乏时间戳补偿,在中断密集场景下,未记录中断占用时间,导致延时计算不准确

一秒落纱 发表于 2025-5-15 01:00 | 显示全部楼层
可以这样,短延时(<100μs):使用DWT循环计数。中等延时(100μs~10ms):使用硬件定时器回调。长延时(>10ms):结合RTOS任务调度

冰春彩落下 发表于 2025-5-15 07:00 | 显示全部楼层
短延时优化,对小于100μs的延时,直接使用空循环(__NOP())或DWT(数据观察跟踪)计数器

别乱了阵脚 发表于 2025-5-15 08:00 | 显示全部楼层
动态时钟补偿,若系统可能动态调整时钟,需在频率变化时更新LOAD值。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

6207

帖子

1

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