【Stm32 HAL库开发】实现微秒级的延时

Stm32 利用HAL库 实现微秒级的延时

本博客的方法基于HAL库和CubeMX开发的stm32芯片通用

介绍

由于HAL只提供了ms级的延时,但有些特殊场景,比如与通信速率较慢的设备通信时,会需要用到us级延时。

接下来直接进入正题。

CubeMX的配置

时钟源的选择


在这里我是使用了外部晶振作为时钟源

时钟树的配置


在这里我直接将频率拉满至84MHz

定时器的配置

为了实现1us的延时,我需要一个定时器(timer),并确保定时器的频率是1MHz,也就是1us记一次数。比如我的系统时钟是84MHz,那么我的分频就应该选择 84-1 = 83
下图是我定时器的配置。

要注意选择Internal Clock

代码部分

TIM_HandleTypeDef *TIMER; //需要传入一个指向我们所配置的定时器的指针变量(句柄)
//例如 TIMER = &htim1;
void delay_us(uint16_t us) {
  __HAL_TIM_SET_COUNTER(TIMER, 0);  // 把TIMER的counter设为0
  while (__HAL_TIM_GET_COUNTER(TIMER) < us); //读取定时器的counter值
 }
//由于定时器的频率是1MHz,所以其counter每次加1的时候,就表示过了1us
//每次调用时都把定时器的counter先置为0

结语

参考了Github上的思路
Github链接:https://github.com/MR-Addict/STM32-HAL-PS2-Library
写的有什么问题或者有疑惑的地方欢迎评论区留言

posted on   bdrf_lby  阅读(1434)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示