Uriah 发表于 2025-5-3 07:22

SysTick做延时是不是不太准?

感觉用它定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值。
页: [1]
查看完整版本: SysTick做延时是不是不太准?