打印
[其他ST产品]

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

[复制链接]
398|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

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

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

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

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

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


使用特权

评论回复
沙发
elephant00|  楼主 | 2022-12-14 10:05 | 只看该作者

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

    配置外部高速时钟。

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

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


使用特权

评论回复
板凳
elephant00|  楼主 | 2022-12-14 10:06 | 只看该作者

激活TIM7,设置如下:

  • 预分频PSC为71,分频后TIM7时钟为72/(71+1)=1MHz

  • 计数模式为向上

  • 计数周期为1,就是说定时器一个周期后就溢出了,而定时器一个周期的时间是定时器时钟频率的倒数,1/1M,也就是1us。


    生成代码。

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


使用特权

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

本版积分规则

970

主题

2982

帖子

7

粉丝