使用STM32CubeIDE实现HAL库微秒Us延迟

在STM32CubeIDE中,此软件使用的是HAL库,而且对于时间延迟只有HAL_Delay()函数,也就是毫秒延迟函数。

下文将讲述如何在STM32CubeIDE中获取微秒延迟函数(HAL_Delay_us)。

首先选择一个定时器,要注意选择的是哪一个定时器。因为不同的定时器可能时钟频率不同。由于选择的时钟频率不同,后续程序中的数值要对应进行相应的修改。

本次作者使用的是TIM4定时器,使用的是STM32F437芯片,打开芯片数据手册可观察到TIM4挂载在APB1总线上。

 

 在图形化配置界面,打开Clock Configuration 可以观察到TIM5挂载的APB1时钟频率是多少。此时作者配置的是90MHz,如下图所示。

 在TIM5配置中选中Internal Clock,然后将预分频系数设置成90-1=89(因为此处是从0开始计数)

Counter Period 改成1

点击生成代码

在tim.c中添加如下代码

void HAL_Delay_us(uint16_t us)
{
    uint16_t delay = 0xffff-us-5;		//从此数进行计数,如计数了65535次则刚好1us	
    										
    HAL_TIM_Base_Start(&htim5);  	    //开启计数器
    __HAL_TIM_SetCounter(&htim5,delay);	//设置计数器
    while(delay<0xffff-5)
    {
        delay = __HAL_TIM_GetCounter(&htim5); 获取当前计数值
    }
    HAL_TIM_Base_Stop(&htim5);
}

在tim.h中添加如下代码

void HAL_Delay_us(uint16_t us);

至此得到了微秒延迟的函数,只需要调用HAL_Delay_us()函数即可

测试:

使用引脚高低电平翻转+延迟函数,如设置正确的话将实现方波信号。

(测试前需要对引脚进行使能)

测试代码如下:

在main.c的While循环中添加如下代码:

//us延时测试
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);
HAL_Delay_us(1000);

打开示波器,接上设置的相应引脚,烧录程序,可得如下图示波形:

 

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32CubeIDE实现HAL库微秒Us延迟

发表回复