You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nucleo STM32H723开发板FreeRTOS的osDelay延时为预期3倍问题求助

问题根因
  • 延时偏差是FreeRTOS滴答定时器初始化时机早于系统时钟配置时机导致的:
    1. CubeIDE默认生成的代码会先初始化FreeRTOS内核、配置Timer7作为滴答时钟源,此时SystemCoreClock还停留在HSI的64MHz初始值,Timer7的重载值、分频系数都是基于64MHz计算的
    2. 后续才会执行SystemClock_Config()将系统主频拉高到216MHz,Timer7的实际计数频率随总线时钟同步升高,但FreeRTOS配置的configCPU_CLOCK_HZ引用的SystemCoreClock已经更新为216MHz,内核计算tick时长的基准和Timer7实际计数频率不匹配
    3. 你手动将configCPU_CLOCK_HZ固定为64000000后,内核计算基准和Timer7初始化时的基准一致,所以延时恢复正常,本质是掩盖了初始化顺序错误的问题
CubeIDE配置修复方案

不需要手动修改FreeRTOSConfig.h,仅需调整生成代码的执行顺序即可:

  1. 打开CubeIDE的Pinout & Configuration界面,进入Project Manager > Advanced Settings
  2. 在Generated Function Calls列表中,拖动SystemClock_Config()项,将其调整到MX_FREERTOS_Init()之前
  3. 确认FreeRTOS配置中configCPU_CLOCK_HZ保持默认的SystemCoreClock、滴答源保持为Timer7
  4. 重新生成代码下载运行即可
验证

调用osDelay(10000)测量实际延时,确认已经恢复为10秒的正常水平。

内容的提问来源于stack exchange,提问作者Michael Ringkøbing Jensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:24:06