[NUCLEO-F030R8开发]4-HAL_Init之初探

  • lkl0305@163.com
  • LV4工程师
  • |      2015-08-23 21:10:03
  • 浏览量 4853
  • 回复:4

今天继续给大家分享,通过1-MDK+STM32CubeMX点亮LED 这个例子,我们很方便的使用STM32CubeMX帮助我们生成了模版,当然,里面也自动生成了很多基础代码。

接下来分析一下这些代码,今天就从主函数中第一个代码HAL_Init()函数来分析:

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

1、当然,这个函数主要完成片内外设、FLASH和SYSTICK的初始化。

4-HAL_Init之初探

2、打开HAL_Init(),可以看到,一个是初始化systick,一个是初始化底层外设,第2个在使用时需要用户自己根据实际添加。

4-HAL_Init之初探

3、在HAL_InitTick中,功能如图:

4-HAL_Init之初探

4、其中systick的配置函数又调用了内核函数SysTick_Config

4-HAL_Init之初探

5、在内核函数中,具体功能如图:

4-HAL_Init之初探

6、其中关于systick,是M0内核的一部分,相关寄存器在芯片的参考手册上没有,但在《The Definitive Guide to the ARM Cortex-M0》这本书中有描述,它是一个减计数器,主要寄存器如下图:

4-HAL_Init之初探

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk; 

的含义参考下图:

4-HAL_Init之初探

SysTick->LOAD  = ticks - 1; 参考下图:

4-HAL_Init之初探

SysTick->VAL   = 0;含义参考这里

4-HAL_Init之初探

其实关于HAL_Init的实现还是比较清晰的。

7、最后要注意,如何程序中使用了其他中断,又使用了HAL_Delay函数的话,就应该将systick的中断优先级调高,否则延时可能会被阻塞以至于不准确。

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

至于systick定时1ms到之后,具体如何执行的,以及如何实现HAL_Delay,随后学习后给大家分享。

 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:4
lkl0305@163.com 2015-08-23
多谢 fjjjnk1234 的支持
0   回复
举报
发布
fjjjnk1234 2015-08-23
赞一个!分享得不错
0   回复
举报
发布
lkl0305@163.com 2015-08-23

多谢支持。没有太多事情,所以就多学些

0   回复
举报
发布
马超飞燕 2015-08-23
跟新的真快呦
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子