单片机us级延时函数实现方法

1. 基于空循环(软件延时)

  • 原理:利用单片机的指令执行时间,通过空循环消耗时间。
  • 缺点:受编译器优化、主频变化影响大,不够精准,通常用于粗略延时。

示例(以 72MHz STM32 为例)

void delay_us(uint32_t us)
{
    uint32_t i;
    while (us--)
    {
        // 下面的循环次数需根据主频校准
        for (i = 0; i < 9; i++)  
        {
            __NOP();  // 空指令,占一个CPU周期
        }
    }
}

校准方法:用示波器测输出脉冲宽度,调整循环次数。

2. 基于定时器(推荐,高精度)

  • 原理:用硬件定时器计数,精度高,受 CPU 频率变化影响小。

示例(STM32,TIM 定时器)

void delay_us(uint32_t us)
{
    uint32_t start = TIM2->CNT;
    while ((TIM2->CNT - start) < us);

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务