[STM32F4] 用 STM32 编写延时函数

[复制链接]
2169|72
线稿xg 发表于 2026-4-13 19:06 | 显示全部楼层
定时器延时时,要确保更新PSC和ARR值,否则时间可能不准确。
wwppd 发表于 2026-4-10 16:49 | 显示全部楼层
延时函数是否使用了固定循环次数?
ulystronglll 发表于 2026-4-10 17:07 | 显示全部楼层
用 SysTick 延时,自动适配任何系统时钟
macpherson 发表于 2026-4-10 19:29 | 显示全部楼层
若延时函数通过空循环实现,且循环次数基于 16 MHz 的时钟周期计算,当系统时钟提升到 64 MHz 时,每个指令周期缩短为原来的 1/4,导致实际延时时间远小于预期。
belindagraham 发表于 2026-4-10 21:23 | 显示全部楼层
软件延时的精度受时钟频率、中断响应、编译器优化等多因素影响,而硬件定时器的精度仅依赖时钟源,不受其他因素干扰。
i1mcu 发表于 2026-4-10 21:43 | 显示全部楼层
使用了系统滴答定时器但未正确配置
deliahouse887 发表于 2026-4-11 11:18 | 显示全部楼层
使用 SysTick 延时              
sdCAD 发表于 2026-4-11 13:39 | 显示全部楼层
在SystemInit()后更新SystemCoreClock
chenci2013 发表于 2026-4-11 15:58 | 显示全部楼层
根据当前系统时钟频率动态计算循环次数,但需确保编译器不优化循环。
未来AI 发表于 2026-4-16 11:25 | 显示全部楼层
时钟频率上调至64MHz时,需同步更新配置参数,如时钟分频和系统时钟设置,以确保系统稳定运行。
pentruman 发表于 2026-4-12 20:40 | 显示全部楼层
使用硬件定时器              
iyoum 发表于 2026-4-15 11:53 | 显示全部楼层
在循环变量前添加 volatile 关键字,强制编译器保留循环。
fengm 发表于 2026-4-15 15:12 | 显示全部楼层
故障的核心原因是延时函数没有根据系统时钟频率进行正确调整。
mintspring 发表于 2026-4-16 09:00 | 显示全部楼层
我默认你使用 STM32F103(通用型号)+ HAL 库,如果是其他型号,逻辑完全一样,只需要改系统时钟即可。
benjaminka 发表于 2026-4-17 08:06 | 显示全部楼层
禁用编译器优化并增加抗干扰措施              
usysm 发表于 2026-4-17 16:41 | 显示全部楼层
SystemCoreClock 是系统时钟自动全局变量
ingramward 发表于 2026-4-17 20:25 | 显示全部楼层
***不要用空循环延时              
鹿鼎计 发表于 2026-4-19 08:30 | 显示全部楼层
使用DWT(调试计时器)实现微秒级延时,不受中断和系统时钟影响,更改频率无需修改代码,保证延时精确和稳定。
AutoMotor 发表于 2026-4-25 20:45 | 显示全部楼层
首先确定时钟源,然后配置时钟频率,接着启用时钟安全功能,并设置报警阈值和响应方式。
星闪动力 发表于 2026-4-26 12:21 | 显示全部楼层
可能延时函数里,读取系统滴答计时器时溢出或处理不当,需检查溢出处理逻辑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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