STM32启动后系统初始化SystemInit()
来源:互联网 发布:sql注入的防护 编辑:程序博客网 时间:2024/06/05 01:10
启动文件中复位异常相应函数如下:
; Reset handlerReset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP
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()函数,这个函数就是具体操作寄存器进行配置了。
0 0
- STM32启动后系统初始化SystemInit()
- 系统初始化函数SystemInit讲解
- STM32时钟初始化函数SystemInit()详解[转]
- STM32时钟初始化函数SystemInit()详解
- 第六章:STM32时钟初始化函数SystemInit()详解
- stm32启动文件详解及SystemInit函数分析
- STM32启动文件详解及SystemInit函…
- STM32启动文件详解及SystemInit函数分析(转)
- STM32启动文件详解及SystemInit函数分析(转)
- STM32启动文件详解及SystemInit函数分析(转)
- [初始化函数]SystemInit()
- stm32篇--系统初始化
- stm32篇--系统初始化
- STM32库函数SystemInit()的理解
- stm32的SystemInit()函数(转)
- SpringMVC启动后初始化
- STM32 SYSTick系统时钟初始化
- stm32库函数void SystemInit (void)分析
- 图片下拉缩放效果
- 用C++设计一个不能被继承的类
- 集结Android开发里的各种大神
- muduo网络库使用心得
- vs2012 使用正则查找和替换
- STM32启动后系统初始化SystemInit()
- 【完全背包】HDU1963Investment【数据压缩】
- 二维码
- Spring事务Transaction配置的五种注入方式详解
- 史上最全的maven pom.xml文件教程详解
- [poj 2331] Water pipe ID A*迭代加深搜索(dfs)
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- Oracle ORA-01940 无法删除当前已连接用户
- java中两种随机数的产生方式