STM32芯片启动全过程详解:Cortex-M3内核与ARM7/9差异
需积分: 15 15 浏览量
更新于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的初始化过程,确保设备在不同启动模式下都能正确地执行初始化任务。这对于深入研究硬件开发和嵌入式系统编程至关重要。
konglingzhi000
- 粉丝: 1
- 资源: 10
最新资源
- androidcollectibleguide:Android收藏指南应用程序的源代码-Android application source code
- 2004年全国主要人口数据
- leetcode答案-leetcode-cs:leetcode刷题
- WHGradientHelper:iOS渐变,支持——线性渐变,径向渐变,渐变动画,lable字体渐变,lable字体渐变动画
- 基于STM32手写绘图板的设计.zip
- C-:siki教程
- FabriKGenerator:用Kotlin编写的Fabric mod的mod模板生成器
- leetcode答案-leetcode-machine-swift:Xcode中的leetcode解决方案验证
- YourToDo:使用Django制作的To Do应用程序,用户可以在其中添加,编辑和删除任务
- PHP实例开发源码—PHP版 Favicon在线生成工具.zip
- HttpServer.rar
- SmartCurrencyConverter:Android应用程序的源代码-SmartCurrencyConverter-Android application source code
- MDA车库
- GOTOTALPLAY
- leetcode答案-Study4Job:为了准备秋招而做的准备
- hkp_client:用Dart编写的非常基础的HKP密钥服务器客户端