STM32芯片启动全过程详解:Cortex-M3内核与ARM7/9差异

需积分: 15 3 下载量 30 浏览量 更新于2024-09-11 收藏 47KB DOC 举报
本文详细解析了STM32芯片从启动到运行的全过程,特别是针对Cortex-M3内核架构的变化。相较于ARM7/ARM9内核,Cortex-M3具有不同的启动模式,主要区别在于复位后的起始地址和中断向量表的位置。以下是关键步骤: 1. 复位启动机制: - 在ARM7/ARM9内核中,复位后CPU从0x000000固定地址开始执行,而中断向量表的位置不是固定的。 - Cortex-M3引入了更多的灵活性,可通过boot引脚设置: - 将中断向量表定位在SRAM(地址0x2000000),PC指针同样在此处。 - 定位在FLASH(地址0x8000000)。 2. Cortex-M3特定规则: - 起始地址需存放堆顶指针和复位中断入口向量地址。 - 在复位后,Cortex-M3自动从堆顶指针后的地址获取中断向量并执行相应的服务程序。 3. 内存区域划分: - "stm32f10x_vector.s" 文件定义了数据段(DATA_IN_ExtSRAM)、栈空间(STACK)和堆空间(HEAP)。这些区域的大小、初始化状态和访问权限都有明确的规定。 - "__initial_sp" 表示初始栈指针,用于记录堆栈顶的地址。 - "__heap_base" 和 "__heap_limit" 分别标识堆空间的起始和结束地址。 4. 指令集和预处理器指令: - 使用THUMB指令集,这是一种低功耗模式,适合嵌入式应用。 - PRESERVE8 指令可能与处理字节对齐有关。 5. 异常处理: - 引入了 NMIException 和 HardFaultException 异常处理函数的导入,这两个函数在遇到相应的中断时会被调用。 总结起来,理解STM32的启动过程涉及理解其内核特性、内存管理以及异常处理机制。通过分析"stm32f10x_vector.s" 文件中的代码,开发者能够更好地配置STM32的初始化过程,确保设备在不同启动模式下都能正确地执行初始化任务。这对于深入研究硬件开发和嵌入式系统编程至关重要。