用SysTick定时器做延时不准,是浮点的锅?
系统滴答时钟是用的默认配置,用HAL_Delay结果偏得离谱,是不是和FPU有关?你是不是加了浮点运算,卡主循环了? 你是不是开了FPU但是没加Lazy stacking? 看一下主频是不是配置对了? HAL_Delay会被中断打断的你知道吧? 用DWT试试看,SysTick不准很正常。 会不会是中断优先级太乱? F411高频下SysTick确实容易不准。 你试过用TIM代替SysTick延时不? 会不会是别的中断占用时间太久? HAL库里的延时本身就不是精确的。 在STM32F4中使用SysTick定时器做延时不准,通常并非浮点运算的问题,而是由系统时钟配置错误、中断优先级设置不当、代码执行效率问题或硬件噪声干扰等因素导致 不是,要么是晶振的问题,要么是代码的问题。
HAL_Delay函数已经相当准了 系统时钟配置错误,SysTick使用系统的HCLK作为其时钟源。如果系统时钟配置不正确,会直接影响SysTick的工作频率,进而导致延时不准。比如,若外部晶振实际为8MHz,但代码中仍按默认的25MHz进行配置,就会使延时出现偏差 代码执行效率问题,程序中的其他部分可能占用过多CPU时间片,使得SysTick计数未能及时更新,进而造成延时误差 可能系统时钟配置不正确。 中断优先级设置不当吧 可能周围有电磁干扰吧 有用户在使用STM32F4时,调用HAL_Delay函数延时1s,实际感觉有3s左右。经排查发现,是因为PlatformIO编译默认调用了库里自带的stm32f4xx_hal_conf.h头文件,其中定义的外部晶振值为25MHz,而实际板子为8MHz,导致延时计算错误 程序中的其他部分可能占用过多CPU时间片,使得SysTick计数未能及时更新,从而造成延时误差。
页:
[1]