打印
[STM32L0]

SysTick做延时是不是不太准?

[复制链接]
426|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只适合大致延时,不适合定时。

使用特权

评论回复
5
帛灿灿| | 2025-5-3 07:27 | 只看该作者
定时建议用TIM2或TIM21。

使用特权

评论回复
6
童雨竹| | 2025-5-3 07:27 | 只看该作者
低功耗下SysTick可能不工作。

使用特权

评论回复
7
万图| | 2025-5-3 07:28 | 只看该作者
我测过偏差在10%左右。

使用特权

评论回复
8
Wordsworth| | 2025-5-3 07:29 | 只看该作者
用DWT周期计数器精度更高。

使用特权

评论回复
9
Bblythe| | 2025-5-3 07:30 | 只看该作者
SysTick是基于系统时钟的,时钟变了也影响。

使用特权

评论回复
10
Pulitzer| | 2025-5-3 07:30 | 只看该作者
我都拿它做tick,延时另开定时器。

使用特权

评论回复
11
Uriah|  楼主 | 2025-5-3 07:32 | 只看该作者
加了OS之后tick的粒度也会变粗。

使用特权

评论回复
12
淡漠安然| | 2025-5-14 18:53 | 只看该作者
SysTick作为内核定时器(优先级通常为最低),若被更高优先级中断(如外部中断、DMA传输完成中断)频繁抢占,会导致延时累积误差

使用特权

评论回复
13
暖了夏天蓝了海| | 2025-5-14 18:56 | 只看该作者
优化SysTick延时(推荐轻量级场景)关闭SysTick中断:仅用于忙等待延时,避免被其他中断抢占

使用特权

评论回复
14
光辉梦境| | 2025-5-14 19:30 | 只看该作者
其实SysTick在中断服务期间暂停计数,返回后继续执行,但中断处理时间未被补偿

使用特权

评论回复
15
江河千里| | 2025-5-14 20:00 | 只看该作者
时钟源依赖性,SysTick默认使用内核时钟(HCLK),若时钟配置动态变化(如通过PLL切换频率),需手动更新重装载值(SysTick->LOAD),否则延时将线性漂移

使用特权

评论回复
16
三生万物| | 2025-5-14 20:50 | 只看该作者
传统SysTick延时函数(如HAL_Delay)通过循环查询SysTick->VAL实现,会阻塞CPU执行其他任务,降低系统实时性

使用特权

评论回复
17
夜阑风雨| | 2025-5-14 21:12 | 只看该作者
缺乏时间戳补偿,在中断密集场景下,未记录中断占用时间,导致延时计算不准确

使用特权

评论回复
18
一秒落纱| | 2025-5-15 01:00 | 只看该作者
可以这样,短延时(<100μs):使用DWT循环计数。中等延时(100μs~10ms):使用硬件定时器回调。长延时(>10ms):结合RTOS任务调度

使用特权

评论回复
19
冰春彩落下| | 2025-5-15 07:00 | 只看该作者
短延时优化,对小于100μs的延时,直接使用空循环(__NOP())或DWT(数据观察跟踪)计数器

使用特权

评论回复
20
别乱了阵脚| | 2025-5-15 08:00 | 只看该作者
动态时钟补偿,若系统可能动态调整时钟,需在频率变化时更新LOAD值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

4876

帖子

1

粉丝