Pulitzer 发表于 2025-5-9 07:38

用SysTick定时器做延时不准,是浮点的锅?

系统滴答时钟是用的默认配置,用HAL_Delay结果偏得离谱,是不是和FPU有关?

Clyde011 发表于 2025-5-9 07:41

你是不是加了浮点运算,卡主循环了?

周半梅 发表于 2025-5-9 07:42

你是不是开了FPU但是没加Lazy stacking?

公羊子丹 发表于 2025-5-9 07:43

看一下主频是不是配置对了?

帛灿灿 发表于 2025-5-9 07:44

HAL_Delay会被中断打断的你知道吧?

童雨竹 发表于 2025-5-9 07:45

用DWT试试看,SysTick不准很正常。

万图 发表于 2025-5-9 07:45

会不会是中断优先级太乱?

Wordsworth 发表于 2025-5-9 07:46

F411高频下SysTick确实容易不准。

Bblythe 发表于 2025-5-9 07:47

你试过用TIM代替SysTick延时不?

Pulitzer 发表于 2025-5-9 07:48

会不会是别的中断占用时间太久?

Uriah 发表于 2025-5-9 07:49

HAL库里的延时本身就不是精确的。

白马过平川 发表于 2025-6-12 09:00

在STM32F4中使用SysTick定时器做延时不准,通常并非浮点运算的问题,而是由系统时钟配置错误、中断优先级设置不当、代码执行效率问题或硬件噪声干扰等因素导致

codingtuzi 发表于 2025-6-12 09:56

不是,要么是晶振的问题,要么是代码的问题。
HAL_Delay函数已经相当准了

温室雏菊 发表于 2025-6-12 10:00

系统时钟配置错误,SysTick使用系统的HCLK作为其时钟源。如果系统时钟配置不正确,会直接影响SysTick的工作频率,进而导致延时不准。比如,若外部晶振实际为8MHz,但代码中仍按默认的25MHz进行配置,就会使延时出现偏差

春日负喧 发表于 2025-6-12 11:00

代码执行效率问题,程序中的其他部分可能占用过多CPU时间片,使得SysTick计数未能及时更新,进而造成延时误差

probedog 发表于 2025-6-12 11:48

可能系统时钟配置不正确。

flycamelaaa 发表于 2025-6-12 11:54

中断优先级设置不当吧

stormwind123 发表于 2025-6-12 11:56

可能周围有电磁干扰吧

她已醉 发表于 2025-6-12 13:00

有用户在使用STM32F4时,调用HAL_Delay函数延时1s,实际感觉有3s左右。经排查发现,是因为PlatformIO编译默认调用了库里自带的stm32f4xx_hal_conf.h头文件,其中定义的外部晶振值为25MHz,而实际板子为8MHz,导致延时计算错误

powerantone 发表于 2025-6-12 15:00

程序中的其他部分可能占用过多CPU时间片,使得SysTick计数未能及时更新,从而造成延时误差。
页: [1]
查看完整版本: 用SysTick定时器做延时不准,是浮点的锅?