1.Cortex-M系统
1.1系统结构
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(直接内存访问)允许外围设备直接与系统内存进行数据传输,而无需处理器的干预。(具体讲解见DMA一文)
6.中断控制器:(具体讲解见中断一文)
7.电源管理单元: 用于实现低功耗操作。它可以对处理器和外部设备进行动态电源管理,以最小化能量消耗并延长电池寿命。
1.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)。
1.3启动流程
①Boot引脚设定,寻找初始的地址。 (闪存是0x0800000,系统存储器是0x1FFFF000,SRAM是0x20000000)
启动模式只决定程序烧录的位置,加载完程序之后会有一个重映射(映射到0x00000000地址位置);
值得注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。
②设置堆栈
定义堆栈大小,分配了相应的空间。
栈顶指针_initial_sp,堆的起始地址heap_base定义。
③跳转到Reset_Handler
Reset_Handler 是复位时的处理函数,该函数首先调用 SystemInit(系统时钟) 完成时钟、调用**HardFault_Handler(异常中断)**中断向量偏移的初始化工作,然后跳转到 __main 函数, __main函数会完成RW、ZI数据段的重定位工作,即将ROM中的RW数据拷贝到RAM中,将ZI段清零,然后跳转到_rt_entry进行Stack和Heap的初始化。
④跳转到真正的main函数继续执行用户的主程序