[STM32F4] 用 STM32 编写延时函数

[复制链接]
2167|72
Uriah 发表于 2026-4-1 08:40 | 显示全部楼层
别用__NOP写微秒延时,F4的流水线和缓存会严重影响精度,用定时器重配置分频和计数值才是可靠做法。
Clyde011 发表于 2026-4-1 08:42 | 显示全部楼层
你可以先打印SystemCoreClock值看看,是不是实际频率没到64MHz,PLL配置错了也会导致延时异常。
Clyde011 发表于 2026-4-1 08:42 | 显示全部楼层
你可以先读一下实际运行的主频值,确认PLL配置真的跑到64MHz了,很多时候是倍频参数错了导致时钟异常。
wengh2016 发表于 2026-4-3 11:25 | 显示全部楼层
修改APB1分频系数?              
minzisc 发表于 2026-4-3 14:34 | 显示全部楼层
// 初始化SysTick
void delay_init(uint32_t sysclk) {
    // 配置SysTick为1us计数一次
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  // 先关闭
    SysTick->LOAD = sysclk / 1000000 - 1;       // 重装载值
    SysTick->VAL = 0;                        // 清空当前值
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |  // 使用处理器时钟
                    SysTick_CTRL_ENABLE_Msk;      // 使能
}

// 微秒延时
void delay_us(uint32_t us) {
    uint32_t ticks = us * (SystemCoreClock / 1000000);
    uint32_t start = SysTick->VAL;
   
    if(start < ticks) {
        ticks -= start;
        while(SysTick->VAL >= start);  // 等待溢出
        while(SysTick->VAL < (SysTick->LOAD - ticks));
    } else {
        while(SysTick->VAL - start > ticks);
    }
}

// 毫秒延时
void delay_ms(uint32_t ms) {
    while(ms--) {
        delay_us(1000);
    }
}
houjiakai 发表于 2026-4-3 17:57 | 显示全部楼层
可调循环延时              
51xlf 发表于 2026-4-3 18:09 | 显示全部楼层
如何测量实际的时钟频率?              
jackcat 发表于 2026-4-4 20:44 | 显示全部楼层
使用系统滴答定时器              
1988020566 发表于 2026-4-4 22:30 | 显示全部楼层
为什么 64MHz 会直接 “出错”?
youtome 发表于 2026-4-5 07:53 | 显示全部楼层
编译器优化导致循环被移除              
LinkMe 发表于 2026-4-8 18:17 | 显示全部楼层
检查晶振和PLL设置,确保频率匹配或调整PLL系数。
digit0 发表于 2026-4-11 17:04 | 显示全部楼层
提升时钟到64MHz,得调整配置以确保系统稳定运行。
哪吒哪吒 发表于 2026-4-12 14:32 | 显示全部楼层
可能HSE或HSI切换PLL时,频率突变,计时基准紊乱。
mollylawrence 发表于 2026-4-9 15:54 | 显示全部楼层
使用基于nop循环或简单循环的延时
sanfuzi 发表于 2026-4-9 16:27 | 显示全部楼层
软件延时函数未动态适应时钟频率变化,或被编译器优化。
burgessmaggie 发表于 2026-4-9 18:54 | 显示全部楼层
系统核心时钟变量 未更新              
bartonalfred 发表于 2026-4-10 10:33 | 显示全部楼层
HAL_Delay(1000);  // 1秒延时,HAL自动适配时钟
yorkbarney 发表于 2026-4-10 11:50 | 显示全部楼层
死循环延时硬编码,依赖固定时钟频率
robertesth 发表于 2026-4-10 13:00 | 显示全部楼层
怎么设置时钟安全系统?              
elsaflower 发表于 2026-4-10 15:55 | 显示全部楼层
延时函数依赖固定时钟周期              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0