一文带你搞懂STM32的启动过程
1. Cortex-M系统架构
1.处理器核心: Cortex-M3
2.存储器系统: Flash,SRAM,FSMC等
3.总线接口
总线矩阵:总线矩阵是一种硬件结构,用于连接处理器核心、内存和外设等主要组件。
AHB总线:AHB是一种高性能总线,用于连接处理器核心和高带宽外设,如存储器控制器和DMA(Direct Memory Access)控制器等。AHB总线通过总线矩阵与处理器核心和其他高性能组件进行连接。
APB:APB1和APB2是两种低功耗外设总线,用于连接处理器核心和低带宽外设,如串口通信接口、定时器和I/O控制器等。
APB2负责的外设 AD,I/O,高级TIM,串口1。
APB1负责的外设 DA,USB,SPI,I2C,CAN,串口2345,普通TIM,PWR==
4.外设接口 :Cortex-M处理器通过外设接口与外部设备进行通信,如通用输入输出(GPIO)、串行通信接口(UART/SPI/I2C)和定时器等。
5.DMA: DMA代表Direct Memory Access(直接内存访问)允许外围设备直接与系统内存进行数据传输,而无需处理器的干预。
6. 中断控制器
7. 电源管理单元: 用于实现低功耗操作。它可以对处理器和外部设备进行动态电源管理,以最小化能量消耗并延长电池寿命。
2. STM32F1和F4的区别
内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;
主频不同:F1主频72MHz,F4主频168MHz;
浮点运算:F1无浮点运算单位,F4有;
功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等;
内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)。
3. 启动流程
1. Boot引脚设定,设置启动模式,寻找初始的地址。 (闪存是0x0800000,系统存储器是0x1FFFF000,SRAM是0x20000000)。
启动模式只决定程序烧录的位置 加载完程序之后会有一个重映射(映射到0x00000000地址位置);值得注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。
2. 设置堆栈
3. 定义中断向量表
4. 执行Reset_Handler复位处理函数
Reset_Handler
是复位时的处理函数,在芯片复位时会被调用。SystemInit
完成系统的初始化工作,然后跳转到 __main
函数5. 执行__main函数
6. 执行用户的主函数
面试问题
1.STM32启动过程
1.设置boot引脚,选择启动模式,将对应区域的存储空间映射到0x00000000中。
2. 设置堆栈大小,定义栈的起始地址,堆的起始地址以及结束地址
3.定义中断向量表,定义了复位、NMI、硬件故障、内存管理单元故障、总线故障、使用错误等异常处理函数的入口地址。
4.执行Reset_Handler复位处理函数,调用SystemInit函数完成系统的初始化函数并跳转到__main函数。
5.执行__main函数,进行异常处理函数的定义,完成用户堆栈的初始化。
6. 执行用户的主函数。
2.STM32有哪几种启动方式?
STM32总共有三种启动方式,boot1为X,boot0为0为从Flash启动,boot1为0,boot0为1为从系统存储器启动,boot1为1, boot0为1为从SRAM启动。从Flash启动是正常的工作模式,从SRAM启动是用于调试的模式,至于从系统存储区启动,这种启动模式的程序功能由厂家设置。
作者:炒 蛋