本文主要是介绍STM32启动后系统初始化SystemInit(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
启动文件中复位异常相应函数如下:
; Reset handler
Reset_Handler PROCEXPORT Reset_Handler [WEAK]IMPORT __mainIMPORT SystemInitLDR R0, =SystemInitBLX R0 LDR R0, =__mainBX R0ENDP
SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()这个函数从来没有关心过,只知道这是进行STM32系统初始化的一个函数。今天决定仔细看看,重新开始STM32的学习。这个函数在system_stm32f10x.c中,此C文件主要就是干具体硬件配置相关的工作。
从函数说明来看,此函数功能就是 初始化内部FALSH,PLL并且更新系统时钟 。此函数需在复位启动后调用。
第一行代码 操作时钟控制寄存器,将内部8M高速时钟使能 ,从这里可以看出 系统启动后是首先依靠内部时钟源而工作的 。
这两行代码则是操作时钟配置寄存器。其主要设置了MCO(微控制器时钟输出)PLL相关(PLL倍频系数,PLL输入时钟源),ADCPRE(ADC时钟),PPRE2(高速APB分频系数),PPRE1(低速APB分频系数),HPRE(AHB预分频系数),SW(系统时钟切换),开始时,系统时钟切换到HSI,由它作为系统初始时钟。宏STM32F10X_CL是跟具体STM32芯片相关的一个宏。
这几句话则是 先在关闭HSE,CSS,,PLL等的情况下配置好与之相关参数然后开启,达到生效的目的 。
这一段主要是 跟中断设置有关 。开始时,我们需要 禁止所有中断并且清除所有中断标志位 。不同硬件有不同之处。
这段跟 设置外部RAM 有关吧,我用到的STM32F103RBT与此无关。
此又是一个函数,主要是 配置系统时钟频率 。HCLK,PCLK2,PCLK1的分频值,分别代表AHB,APB2,和APB1。当然还干了其它的事情, 配置FLASH延时周期和使能预取缓冲期 。后面的这个配置具体还不了解。
这段代码主要是实现 向量表的重定位 。依据你想要将向量表定位在内部SRAM中还是内部FLASH中。这个SCB开始没在STM32参考手册中发现,原来它是跟Cortex-M3内核相关的东西。所以ST公司就没有把它包含进来吧。内核的东西后面再了解,这里给自己提个醒。
然后再看看SystemInit()中的那个函数SetClock()又做了什么吧。
这个函数里面又有SetSysClockTo72()函数,这个函数就是具体操作寄存器进行配置了。
这篇关于STM32启动后系统初始化SystemInit()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!