当本菜鸟开始接触STM32的时候还是看了原子哥的寄存器教程才跳坑的。
现在ST已经把HAL库推向了主流,但是令我不解的是,HAL那么强大,居然没有一个微秒级别的延时函数?!
黑人问号脸。
好了,废话不多,直接上代码。
#include "delay_us.h"
/*****************************************************************
* 基于STM32F0 HAL的微秒延时函数
* @功能:实现US级延时
* @注意:精准延时范围:2~999US
*2019-07-03Designed By XiaoYang https://www.pypyn.com
******************************************************************/
uint32_t CFG_VAL = 0;
void HAL_Delay_US(__IO uint32_t Delay)
{
if(Delay < MAX_Delay_CNT && Delay > 1)
{
uint32_t wait = SysTick->LOAD - ((Delay - 1) * CFG_VAL);
//CFG_VAL =HAL_RCC_GetHCLKFreq()/1000U/1000U))
//计算出等待1US需要的计数器值
SysTick->VAL=0UL; //重置SysTick计数器,计数器为向下计数
while(wait < (SysTick->VAL));//等待时间到达
}
}
/**

本文介绍了如何在STM32 HAL库中自定义一个微秒级别(US)的延时函数,通过利用SysTick定时器计算出等待特定微秒所需的计数值。代码已提供,适用于精准延时范围2~999US,但频繁调用可能影响HAL_Delay的毫秒延时精度。
最低0.47元/天 解锁文章
1353

被折叠的 条评论
为什么被折叠?



