查看: 216|回复: 6
打印 上一主题 下一主题

[NUCLEO-F030R8开发]5-HAL_Delay分析

[复制链接] qrcode

27

主题

34

帖子

102

积分

注册会员

Rank: 2

积分
102
楼主
跳转到指定楼层
发表于 2015-8-25 10:01 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

接上一贴——[NUCLEO-F030R8开发]4-HAL_Init之初探(http://bbs.ickey.cn/group-topic-id-53940.html),今天分析一下经常用到的HAL_Delay()函数的内容。

 

===============================================

我们在程序中经常用到简短的延时,功能单一,用不上复杂的定时器,一般都想使用软件延时,这个在51单片机中经常用到。

但软件延时精度不太高,特别是ARM中,写出一段程序,想看看执行多长时间,然后再用软件延时,比较难。

这是一般都会想到systick这个产生简单延时。

HAL_Delay函数正是如此:

首先要记住,上次分析的结果,在HAL_Init中将systick初始化成1ms中断1次。

1、先看看前面点灯实例:

2、它的实现部分如图:

3、这里用到一个全局变量,记录systick 1ms中断次数:

3、下面是获得systick中断次数的函数,其实就是返回了全局变量的值

4、那systick中断次数如何计数的?

看下面,systick1ms中断函数,可以看到调用了HAL_IncTick函数。

5、而这个函数就是每次定时到,计数值自动加1

6、反过来再看HAL_Delay函数的实现部分,就比较清楚了。

这个比较简单吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

3

主题

97

帖子

23

积分

新手上路

Rank: 1

积分
23
沙发
发表于 2015-8-25 10:31 PM | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

9

主题

86

帖子

41

积分

新手上路

Rank: 1

积分
41
板凳
发表于 2015-8-25 10:35 PM | 只看该作者
说的通俗一点,就是系统定时本身是个时钟,每隔设定时间中断一次,而不是空等待,我理解的有问题吗?
回复 支持 反对

使用道具 举报

0

主题

93

帖子

16

积分

新手上路

Rank: 1

积分
16
地板
发表于 2015-8-26 05:50 AM | 只看该作者
HAL_Delay 其实还是死等。。 
回复 支持 反对

使用道具 举报

0

主题

93

帖子

30

积分

新手上路

Rank: 1

积分
30
5#
发表于 2015-8-26 01:55 PM | 只看该作者
时钟不等待,但在HAL_Delay里面等待了
回复 支持 反对

使用道具 举报

0

主题

77

帖子

22

积分

新手上路

Rank: 1

积分
22
6#
发表于 2015-8-26 01:56 PM | 只看该作者

是的,可以用在一些简单的地方

回复 支持 反对

使用道具 举报

66

主题

492

帖子

924

积分

高级会员

Rank: 4

积分
924
7#
发表于 2015-8-27 11:33 AM | 只看该作者
噢噢,那这个可以和那个stm32f0_stdperiph_lib一起放工程里嘛?没用过这个cube库呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表