打印
[STM32F1]

HAL库 微秒Us延迟

[复制链接]
74|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
geraldbetty|  楼主 | 2024-2-25 16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在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);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

1128

帖子

0

粉丝