【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 2022-09-04 22:31  bdrf_lby  阅读(2098)  评论(0)    收藏  举报