[家电应用] 大家使用什么操作做为短时间延时啊?

[复制链接]
7702|23
 楼主| jobszheng 发表于 2025-3-8 17:34 | 显示全部楼层 |阅读模式
大家使用什么操作做为短时间延时啊?
我想有10us的延时时间片。

我觉得使用中断的timer来处理,有点浪费。
本来主频都不高!
再使用中断,进出中断的消耗就快等于中断的延时时间了。


OceanGaze 发表于 2025-3-8 18:00 | 显示全部楼层
这么短的延迟时间就直接nop吧!
zchong 发表于 2025-3-9 13:11 | 显示全部楼层
启动一个自由运行的定时器,需要延时的时候读cnt的值出来判断
钓鱼大师 发表于 2025-3-9 16:20 | 显示全部楼层
10US用中断,那就太频繁了,用NOP就好。
xch 发表于 2025-3-10 07:49 | 显示全部楼层
可以仅唤醒不响应中断。
weifeng90 发表于 2025-3-10 08:19 来自手机 | 显示全部楼层
如果精度要求高就用定时器,如果精度要求不高直接用软延时
xionghaoyun 发表于 2025-3-10 08:46 | 显示全部楼层
delay**好
dukedz 发表于 2025-3-10 14:27 | 显示全部楼层
用 systick 计时器,阻塞等待,见 delay_us 函数:
https://github.com/dukelec/cdnet/blob/master/arch/stm32/arch_wrapper.c
alienmiller 发表于 2025-3-10 17:49 | 显示全部楼层
看你用的什么单片机了,频率低精度要求不高的当然nop,频率高对延时有精度要求的那就用定时器。
SpiritSong 发表于 2025-3-10 23:13 | 显示全部楼层
就是使用nop命令,不过要注意不要被编译器给优化掉
ayb_ice 发表于 2025-3-11 09:55 | 显示全部楼层
这取决于主频,比如标准51就是10个NOP,如果是单周期51,又跑的比较快,可以用定时器方式2,不开中断,直接读取两次计数值,相减大于等于10即可

//假设单周期51,跑12M
#define us        *12
void delay_xus(u8 x)
{
        volatile u8 ucBase = TH0;
       
        while ((u8)(TH0 - ucBase) < x)
        {
                //__nop();
        }
}

        delay_xus(10us);
自动化陈稳 发表于 2025-5-25 18:19 | 显示全部楼层
通过编写空的 for 或 while 循环来消耗时间。
暖茶轻语 发表于 2025-11-20 20:14 | 显示全部楼层
可以考虑使用DWT(Data Watchpoint and Trace)单元的CYCCNT寄存器来实现精确的延时,这不需要额外的中断开销。
我趴在云边 发表于 2025-11-24 16:37 | 显示全部楼层
短时间延时常用两种方式:1. 软件延时:写空循环(如 for/while 循环),按 MCU 主频计算循环次数,适配微秒 / 毫秒级短延时,简单无需硬件,但受主频和中断影响;2. 硬件延时:用 MCU 定时器生成精准定时,配置定时器重载值和中断,延时精度高、不占用 CPU,适合对精度要求高的短延时场景,优先推荐后者。
少女诗篇 发表于 2025-11-26 14:02 | 显示全部楼层
短时间延时(微秒 / 毫秒级)常用三种方式:1. 空指令循环(__NOP ()/for 循环),适配纳秒 - 微秒级,需按 MCU 主频校准;2. 定时器延时(配置定时器中断或查询模式),精准度高,不阻塞主程序;3. 系统滴答定时器(SysTick),适合毫秒级,兼容 RTOS。中颖等 8 位 MCU 常用空指令 + 定时器组合,16MHz 主频下__NOP () 约 0.0625μs,简单场景用循环,高精度需求选定时器。
 楼主| jobszheng 发表于 2025-11-28 09:17 | 显示全部楼层
少女诗篇 发表于 2025-11-26 14:02
短时间延时(微秒 / 毫秒级)常用三种方式:1. 空指令循环(__NOP ()/for 循环),适配纳秒 - 微秒级,需按 ...

AI 灌水帖子?!
瞌睡虫本虫 发表于 2026-1-11 22:02 | 显示全部楼层
如果不想使用中断,可以考虑使用DWT(Data Watchpoint and Trace)单元的定时器
雨下纪事 发表于 2026-1-12 16:49 | 显示全部楼层
短时间延时常用三类操作:一是利用 CPU 空循环,通过固定次数的无意义指令消耗时钟周期,实现微秒级延时,简单但精度受主频影响;二是调用 MCU 定时器 / 计数器,配置预分频后读取计数值,精准控制微秒 / 毫秒级延时;三是借助外设空闲周期,如 SPI/I2C 通信间隙的等待指令,适配硬件场景的短延时需求,优先选定时器保障精度。
永久冻结 发表于 2026-1-22 17:38 | 显示全部楼层
短时间延时常用两种操作:1. 定时器 / 计数器延时(精准,不占用 CPU,配置定时器溢出中断或查询标志位,适合 10μs–1s 场景);2. 软件循环延时(简单,无外设依赖,通过空循环消耗时钟周期,适合 μs 级粗略延时)。优先用定时器,避免 CPU 空耗;简单场景用软件循环,需根据主频校准。
蝶弄美人簪 发表于 2026-2-3 15:52 | 显示全部楼层
嵌入式开发短延时常用三种方式:1. 空指令循环,极简但精度低,适配 μs 级粗延时;2. 定时器中断 / 查询,精度高(依托系统时钟),适配 ms/μs 级精准延时,不占用 CPU;3. 外设定时器滴答,利用 SysTick 等内核定时器,兼顾精度与资源,是主流选择。优先选定时器类,空循环仅临时调试用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:热爱开源,乐于分享。在嵌入式技术领域里面,主攻通讯协议,Modbus,TCP/IP以及虚拟化和RTOS

40

主题

1146

帖子

24

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