接上一贴——[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函数的实现部分,就比较清楚了。
这个比较简单吧
|