龙空技术网

STM32的HAL库实现自定义延时函数delay_us(),文末附代码

嵌入式胖胖 238

前言:

如今看官们对“delayc文件主要包含哪些函数并简要说明各函数的作用”可能比较看重,小伙伴们都需要知道一些“delayc文件主要包含哪些函数并简要说明各函数的作用”的相关内容。那么小编同时在网络上收集了一些关于“delayc文件主要包含哪些函数并简要说明各函数的作用””的相关知识,希望我们能喜欢,朋友们快快来了解一下吧!

STM32程序从标准库移植到HAL库的时候,会发现HAL库中只有一个毫秒级延时函数HAL_Delay(),而没有微秒级延时delay_us(),本文就在HAL库中用定时器实现这个delay_us()。

如下图,找到HAL_Delay()函数定义的地方,发现这个函数有__weak标识,是一个弱化函数,可以被重写。

由于HAL库许多地方都使用了HAL_Delay()函数,为了避免惹麻烦建议不重写,可以用定时器自己写一个延时函数。

开发软件用的STM32CubeIDE,此Cube软件的使用方法可以参考这篇文章:STM32外部中断实例。

项目设置,勾选后每个外设的源文件.c、头文件.h分别成双出现。

我用的是ISP编程,选择的是Serial Wire。

配置外部高速时钟。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:嵌入式物联网学习资料(头条)

为了观察效果,开一个LED,它在PC0管脚,低电平点亮。

本实例用到了TIM7,它挂在APB1上,时钟为72MHz。

激活TIM7,设置如下:

预分频PSC为71,分频后TIM7时钟为72/(71+1)=1MHz计数模式为向上计数周期为1,就是说定时器一个周期后就溢出了,而定时器一个周期的时间是定时器时钟频率的倒数,1/1M,也就是1us。

生成代码。

在tim.c的用户代码区添加如下代码。

在tim.h的user code处添加如下引用代码,其中HAL_Delay_us()是微秒级延时函数,HAL_Delay_ms()是毫秒级延时函数。

main.c中添加如下代码,测试效果。

上面代码连续用了13个延时函数,是为了凑够1秒方便观察。另外延时函数的参数是uint16_t,无符号短整型,数值范围为0~65535,数值超限会报错,如下图。

编译代码。

下载到开发板可以看到LED每秒亮一次,STM32CubeIDE软件生成hex文件的方式,请移步此文:STM32单片机中Hex、Bin文件的区别与应用。

原文链接:

转载自:STM32嵌入式开发

原文链接:STM32的HAL库实现自定义延时函数delay_us(),文末附代码

本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

标签: #delayc文件主要包含哪些函数并简要说明各函数的作用