登录/注册

stm32 hal delay us

更多

在STM32的HAL库中实现微秒(µs)级延时,可以通过以下方法实现:


方法1:使用定时器(推荐)

  1. 配置定时器
    选择一个未被使用的定时器(如TIM2),在CubeMX中配置:

    • 时钟源选择内部时钟
    • 预分频器(Prescaler):根据主频计算,使得定时器计数频率为1MHz(1µs计数一次)
      • 例如:主频为84MHz → 预分频值 = 84 - 1
    • 周期(Counter Period):设为最大值0xFFFF(16位定时器)
  2. 代码实现

    
    // 启动定时器
    HAL_TIM_Base_Start(&htim2);

// 微秒延时函数 void delay_us(uint16_t us) { __HAL_TIM_SET_COUNTER(&htim2, 0); // 复位计数器 while (__HAL_TIM_GET_COUNTER(&htim2) < us); // 等待计数值达到目标 }


---

### 方法2:使用DWT(需芯片支持)
利用内核的`DWT->CYCCNT`计数器(需要Cortex-M3/M4/M7):
```c
#include "core_cm4.h" // 根据内核型号包含头文件

void delay_us(uint32_t us) {
    uint32_t start = DWT->CYCCNT;
    uint32_t cycles = us * (SystemCoreClock / 1000000);
    while ((DWT->CYCCNT - start) < cycles);
}

// 初始化DWT(在main()中调用一次)
void DWT_Init(void) {
    if (!(CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk)) {
        CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
    }
    DWT->CYCCNT = 0;
    DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}

方法3:空循环(粗略延时)

void delay_us(uint16_t us) {
    us *= (SystemCoreClock / 1000000) / 5; // 根据主频调整系数
    while (us--);
}

注意事项

  1. 时钟配置:确保定时器或SystemCoreClock值与实际主频一致。
  2. 中断影响:若系统有高优先级中断,可能导致延时误差。
  3. 定时器冲突:确保所选定时器未被其他功能占用。
  4. DWT可用性:部分STM32型号可能不支持DWT,需测试确认。

根据需求选择方法:定时器法最精确,DWT无需外设但依赖内核,空循环适合低精度场景。

STM32C031C6在按键中断处理程序中使用HAL_Delay()延时函数,程序则无法运行怎么解决?

测试STM32C031C6开发板的长短按键,在按键中断处理程序中使用HAL_Delay()延时函数,程序则无法运行,类似进入了死循环,于是则添加了延时函数如下: /[i

2025-03-07 06:50:02

STM32蜂鸣器音乐播放实例教程

开启定时器TIM7,是为了写延时函数HAL_Delay_us()。具体过程请移步此文:STM32的HAL库实现自定义延时函数

2024-03-26 14:19:18

stm32delay函数怎么写

周期执行的操作,但是要尽量保持简洁 } void delay_us ( uint32_t us) { uint32_t ticks = us *

2023-12-21 17:53:28

STM32 HAL 库延时函数 HAL_Delay 解析

HAL 库有提供延时函数,只不过它只能实现简单的毫秒级别延时,没有实现 us 级别延时。下面我们列出HAL 库实现延时相关的函数。首先是功能配置

资料下载 小峰 2022-01-17 09:48:14

stm32HAL库实现us延时方法

stm32之HAL库实现us延时方法HAL_Delay()源码为ms级别

资料下载 370217 2022-01-17 09:32:10

STM32上进行Delay延时的方法

1、使用SYStick专门的延时。void delay_us(uint32_t us){ static uint32_t delay_flag

资料下载 佚名 2021-12-24 19:39:28

stm32 delay文件总结

stm32 delay文件总结delay.h#ifndef __DELAY

资料下载 佚名 2021-12-24 19:36:36

STM32F4 HAL库函数说明下载

STM32F4 HAL库函数说明下载

资料下载 jf_59593610 2021-05-26 09:27:42

FreeRTOS中osDelay和HAL_Delay的区别

\n");HAL_Delay(1000);}}voidB(void*argument){while(1){printf("B\r\n");HAL_Delay(1000);}}烧

2023-10-29 08:00:52

SysTick与HAL_Delay的关系与注意事项

本文将介绍SysTick与HAL_Delay()函数之间的关系,以及使用HAL_Delay()函数的注意事项;

2023-04-21 11:32:11

如何实现stm32h7xx_hal.c的HAL_Delay默认函数呢?

你好呀,这是 stm32h7xx_hal.c 的 HAL_Delay 函数的默认实现(我也假设有许多其他暂停)__weak void HAL_Delay

2023-01-17 07:14:15

HAL库中用定时器实现自定义延时函数delay_us()

STM32程序从标准库移植到HAL库的时候,会发现HAL库中只有一个毫秒级延时函数HA

2022-09-21 10:33:04

Systick定时器延时原理与HAL_Delay()延时函数的使用

代码的书写过程中经常用到延时,这里主要讲述一下HAl延时,HAL库之HAL_Delay()函数在72M主频,

2022-04-26 09:09:38

HAL库如何实现us延时?

stm32之HAL库实现us延时方法HAL_Delay()源码为ms级别

2022-01-17 07:53:10

怎么实现STM32CubeIDE HAL库微秒us的延时Delay

怎么实现STM32CubeIDE HAL库微秒us的延时Delay?

2021-11-25 07:40:21
7天热门专题 换一换
相关标签