今天继续给大家分享,通过1-MDK+STM32CubeMX点亮LED 这个例子,我们很方便的使用STM32CubeMX帮助我们生成了模版,当然,里面也自动生成了很多基础代码。
接下来分析一下这些代码,今天就从主函数中第一个代码HAL_Init()函数来分析:
=========================================================
1、当然,这个函数主要完成片内外设、FLASH和SYSTICK的初始化。
2、打开HAL_Init(),可以看到,一个是初始化systick,一个是初始化底层外设,第2个在使用时需要用户自己根据实际添加。
3、在HAL_InitTick中,功能如图:
4、其中systick的配置函数又调用了内核函数SysTick_Config
5、在内核函数中,具体功能如图:
6、其中关于systick,是M0内核的一部分,相关寄存器在芯片的参考手册上没有,但在《The Definitive Guide to the ARM Cortex-M0》这本书中有描述,它是一个减计数器,主要寄存器如下图:
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
的含义参考下图:
SysTick->LOAD = ticks - 1; 参考下图:
SysTick->VAL = 0;含义参考这里
其实关于HAL_Init的实现还是比较清晰的。
7、最后要注意,如何程序中使用了其他中断,又使用了HAL_Delay函数的话,就应该将systick的中断优先级调高,否则延时可能会被阻塞以至于不准确。
=============================================================
至于systick定时1ms到之后,具体如何执行的,以及如何实现HAL_Delay,随后学习后给大家分享。
多谢支持。没有太多事情,所以就多学些