单片机死循环delay_us()计算方法

1us / 主频时钟周期 = 1us 需要消耗的主频时钟周期数;

1us 需要消耗的主频时钟周期数 / 空转函数一次的指令周期数 = 空转多少次为1us;

需要延时多少us就空转多少次;

c 复制代码
/*
 * 忙等校准:STM32F072 SYSCLK=48MHz(与 system_stm32f0xx.c 一致)
 * Cortex-M0 空循环约 subs+bne=4 周期,再加 1 条 NOP → 约 5 周期/圈
 * 48e6/5 ≈ 9.6,取 10。若 Keil Debug/-O0 明显偏慢,把系数改成 4~6。
 */
#define ONEWIRE_CPU_HZ        48000000u
#define ONEWIRE_CYCLES_LOOP   5u
#define ONEWIRE_LOOPS_PER_US  (ONEWIRE_CPU_HZ / 1000000u / ONEWIRE_CYCLES_LOOP)

static void delay_us(unsigned int us) {
    unsigned int n = us * ONEWIRE_LOOPS_PER_US;
    while (n--) {
        __NOP();
    }
}
相关推荐
li星野16 小时前
【学习记录】DAP调试器电路原理图完全详解:从STM32最小系统到SWD调试接口
stm32·嵌入式硬件·学习
Naiva16 小时前
AD19 基础应用技巧: Polygon Pour 铺铜完成后,自动将铜皮产生的尖角变成圆角
单片机
深圳市恒锐丰科技杨生16 小时前
LR050N03TL4 N 沟道 MOSFET|龙夏电子 Long‑Tek
嵌入式硬件·硬件工程
下辈子不要当码农16 小时前
Linux驱动(2)
linux·运维·单片机
尼喃16 小时前
PW2609原厂要停产,升级版PW2609A:引脚相同
嵌入式硬件
lzqrzpt16 小时前
LED驱动电源选型核心参数解析与工程适配准则
python·单片机·嵌入式硬件
碧海银沙音频科技研究院17 小时前
基于炬芯ATS3089X音箱的音乐播放歌词显示功能实现
人工智能·驱动开发·嵌入式硬件·算法
comyccccc17 小时前
TB6612编码电机驱动板设计全解析学习笔记
单片机·嵌入式硬件
honsor17 小时前
以太网温湿度传感器原理与 Modbus TCP 组网实战,机房动环监控落地
网络·嵌入式硬件·物联网·网络协议·tcp/ip
碧海银沙音频科技研究院17 小时前
基于炬芯ATS308X的离线日志存储导出功能实现
stm32·单片机·嵌入式硬件