STM32F103主函数运行前的系统初始化分析

需积分: 50 9 下载量 10 浏览量 更新于2024-09-05 收藏 176KB PDF 举报
"MDK main函数运行前的分析.pdf" 这篇文档主要讲解了在STM32F103微控制器中,使用MDK(Keil Microcontroller Development Kit)开发环境时,从上电复位到执行`main`函数之前所经历的一系列初始化步骤。这个过程在启动文件`startup_stm32f10x_md_vl.s`中被定义和实现。 首先,启动文件包含了四个关键段:栈段、堆段、中断向量表数据段和代码段。栈段和堆段的大小分别为0x400和0x200,它们在程序开始时并未初始化,这个任务由`_user_initial_stackheap`函数来完成。中断向量表数据段用于存放系统的中断处理程序地址。 接着,文档详细分析了`Reset_Handler`段,这是系统复位后的第一段代码。它首先设置堆栈指针SP的初始值,然后跳转到复位中断处理程序的地址,即`SystemInit`函数。`SystemInit`函数主要负责系统初始化,包括保存跳转前的状态,执行必要的配置,并且在函数结束时将中断向量表重新映射到0x08000000地址,这是通过修改向量表偏移寄存器(EVBAR)来实现的。 然后,文档转向了`_main`函数的分析。`_main`函数的地址是在程序执行过程中动态获取的,经过一系列跳转后,最终定位到0x08000121,这就是`main`函数的入口地址。 `main`函数在程序中扮演着核心角色,它通常包含用户的应用逻辑,例如初始化外设、设置定时器、处理通信协议等。然而,文档并未深入讨论`main`函数的具体内容,只提到了它是在系统初始化完成后开始执行的。 STM32F103在运行`main`函数之前,会经历系统初始化、栈和堆的设置、中断向量表的重新映射等一系列操作。这些步骤确保了微控制器在进入用户代码之前具备了基本的运行环境。了解这些启动流程对于理解嵌入式系统的工作原理和调试至关重要。