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

如何正确配置STM32F103C8的SysTick定时器以解决延迟偏长10倍的问题

问题排查与解决方案

  • 第一步:核对时钟相关宏定义
    首先确认工程中HSE_VALUE宏定义的值与实际晶振频率一致:蓝Pill默认搭载8MHz外部晶振,对应宏值应为8000000,如果误写为80000000会导致所有时钟计算参数偏差10倍,完全匹配你遇到的现象。
  • 第二步:确认外部高速晶振(HSE)是否正常起振
    若晶振虚焊、负载电容参数不匹配,会导致HSE起振失败,芯片自动切换到8MHz内部高速时钟(HSI)运行,也会导致延迟参数偏差。你可以在时钟配置代码中增加HSE就绪检测逻辑,判断是否起振成功:
RCC->CR |= RCC_CR_HSEON;
// 若程序卡在此处,说明HSE硬件或配置有问题
while(!(RCC->CR & RCC_CR_HSERDY));
  • 第三步:核对PLL与总线分频配置
    检查RCC_CFGR寄存器的对应配置位,确保符合72MHz输出要求:
    1. PLL源选择HSE,不要选HSI(HSI作为PLL源时会强制2分频,输入到PLL的频率只有4MHz)
    2. PLL倍频系数设为9倍(8MHz *9=72MHz)
    3. AHB预分频器设为1分频,保证AHB总线时钟等于PLL输出的72MHz
      你也可以直接读取SystemCoreClock全局变量(标准库/HAL库均默认提供)的值,确认当前内核实际运行频率。
  • 第四步:验证SysTick配置正确性
    你当前的SysTick配置逻辑本身没有问题:LOAD值7199999对应72MHz时钟下0.1s延迟,CTRL寄存器0x05也正确选择了AHB作为时钟源。如果你切换到AHB/8时钟源时延迟比例仍为10倍,基本可以确定是内核实际运行频率只有7.2MHz左右,和SysTick配置无关。

小提示:SysTick的LOAD寄存器是24位宽度,最大支持值为16777215,你当前设置的7199999在合法范围内,不存在溢出问题。

内容的提问来源于stack exchange,提问作者wrha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 11:27:02