STM32上电复位后首先执行Reset_Handler,然后调用SystemInit()函数完成时钟等基本初始化,再执行main函数。
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =__main
BX R0
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0LDR R0, =__main
BX R0
ENDP
SystemInit()函数在文件system_stm32f4xx.c中。由于该函数中宏定义较多,所以可读性不高,该函数并不能一目了然的看懂STM32F4的各个时钟都配置成了什么样子,笔者归纳总结了库函数和网上的一些资料,自己写了个手动配置RCC时钟的函数如下:
********************************************************************************
* .@1 - 复位 RCC 时钟配置为系统上电复位后的状态
* 系统上电复位后的时钟状态定义如下 - HSI ON and used as system clock source
* - HSE, PLL and PLLI2S OFF
* - AHB, APB1 and APB2 presca