[应用相关] STM32 systick HAL库 得到微秒延时

[复制链接]
1408|34
 楼主| 铁血丹心LLLL 发表于 2022-2-28 15:54 | 显示全部楼层 |阅读模式
ST, TI, ck, ic
STM32 systick HAL库 得到微秒延时
SysTick是stm32系列单片机基本都有的外设,它是一个24位的倒计数定时器,标准库的滴答定时器可以有毫秒、微妙延时,但是HAL库只有 HAL_Delay();是一个毫秒延时。下面记录一下我的移植过程。

根据标准库的滴答定时器例程的Systick.c /Systick.h 改写而来。把这两个文件拷到我们HAL工程下,并添加到工程中。


74224621c7f98755e3.png

 楼主| 铁血丹心LLLL 发表于 2022-2-28 15:55 | 显示全部楼层
首先在头文件中定义HAL库的滴答结构体;
68153621c7ff013a48.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 15:57 | 显示全部楼层
为了避免结构体冲突,我改写了结构体名,和初始化函数名。重新定义定时器基地址:
26202621c8002d9e38.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 15:58 | 显示全部楼层
再定义一下一会用到的变量类型别名:使用宏定义也可以,不定义直接使用HAL库里的类型名也可以。
18106621c808b01e04.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 15:59 | 显示全部楼层
改写滴答定时器初始化函数:
38618621c80e1e354f.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:00 | 显示全部楼层
改写微秒延时函数:改动不大,主要是”SysTick_CTRL_ENABLE_Msk“没有定义,直接赋值吧
79187621c8122771aa.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:01 | 显示全部楼层
改写毫秒延时
5486621c8135e55d3.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:04 | 显示全部楼层
重新封装HAL_Delay() 和HAL_InitTick(),由于HAL用的弱定义,方便用户直接定义函数,这里相当于直接替换了。
48063621c816b5f345.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:05 | 显示全部楼层
主函数中把头文件声明一下:
79154621c824e9b132.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:08 | 显示全部楼层
在main中,HAL_Init()里有滴答定时器初始化:

28350621c82614bf57.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:11 | 显示全部楼层
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:13 | 显示全部楼层
如果编译没有错误,点击HAL_InitTick();右键是可以直接跳到我们刚刚在SysTick.c中定义的HAL_InitTick()函数的。同样,点击HAL_Delay()也可以跳到刚刚封装的函数。

54512621c83d8f2d3d.png
 楼主| 铁血丹心LLLL 发表于 2022-2-28 16:15 | 显示全部楼层
10549621c842992a3a.png 也没有问题。移植成功。有条件可以试试delay_us();应该也没有问题;
需要注意,如果使用了FreeRTOS,还是需要用HAL自带的初始化函数,因为系统时基使用的滴答定时器,里面开启了系统节拍中断,系统延时必须改为其他的定时器,比如TIM2,这时需要毫秒延时就需要从这个定时器下手了。


eefas 发表于 2022-3-4 20:48 | 显示全部楼层
如何判断一个延时是不是准确呢
pl202 发表于 2022-3-4 20:57 | 显示全部楼层
HAL不是最低是ms延时吗
mnynt121 发表于 2022-3-5 22:33 | 显示全部楼层
STM32 HAL库中仅有对HAl_Delay()毫秒级的延时
chenci2013 发表于 2022-3-5 23:02 | 显示全部楼层
使用for循环就可以的。   
myiclife 发表于 2022-3-5 23:34 | 显示全部楼层
微秒延时就得对72Mhz分频的
averyleigh 发表于 2022-3-6 12:53 | 显示全部楼层
定时器延时一样的。
fentianyou 发表于 2022-3-6 13:33 | 显示全部楼层
https://www.cnblogs.com/kevin-nancy/p/10696681.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

543

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部