一、对于系统的启动和初始化流程
1.启动流程
系统启动文件startup_xx.s进行系统并调用复位中断复位服务程序。在复位中断服务程序里调用SystemInit函数,此函数在文件system_stm32f4xx.c里面之后调用编译器封装好的函数__main ,进入到main中执行用户的函数
2.初始化流程
在main函数中的重要初始化HAL_Init函数即HAL库初始化函数,在stm32f4xx_hal.c中进行配置。
在system_stm32f4xx.c中有关于HSE_VALUE的配置,当时钟不匹配时,会导致串口通信异常现象,可在此文件中修改,SystemInit也在此处定义。
二、初始化中函数的作用
1、HAL_Init函数的作用:
设置中断分组,
设置滴答计数器的每1ms进入中断
配置Flash的指令预取,(即配置flash,供程序应用)
2、HAL_DInit函数的作用:
复位HAL库和滴答时钟。
复位了APB1,2的时钟以及AHB1,2,3的时钟。
三、关于滴答计数器的1ms为时基解读
1、HAL库不像之前的标准库,在系统启动函数SystemInit里面做了RCC初始化
,HAL库是没有做的,所以进入到main函数后,系统还在用内部高速时钟HSI,
对于F4来说,HSI主频是16MHz。
2、对该函数定义为弱定义,在HAL_Init中被直接调用:
SystemCoreClock该值默认为
uint32_t SystemCoreClock = 16000000;
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
/*Configure the SysTick to have interrupt in 1ms time basis*/
HAL_SYSTICK_Config(SystemCoreClock