STM32启动流程
(1) 上电复位,硬件设置 SP、PC 的值 (0x0800 0000读取sp的值 0x0800 0004读取pc的值)
(2) 找到了 Reset_Handler 的地址后,CPU 就从这里开始取指令运行程序;
(3)Reset_Handler调用SystemInit完成时钟、中断向量偏移的初始化工作,然后跳转到__main,__main函数会完成RW、ZI数据段的重定位工作,即将ROM中的RW数据拷贝到RAM中,将ZI段清零,然后跳转到_rt_entry进行Stack和Heap的初始化。
ROM占用大小等于RO SIZE + RW SIZE
RO SIZE 等于 code + RO data
RW SIZE 等于 RW data + ZI data
RW data 是初始化不为0的全局变量和静态变量
ZI data 是没初始化/初始化为0的全局变量和静态变量 + 堆区(0.5kb) + 栈区(1kb)
STM32中startup.s文件
设置栈的大小 默认为1kb
设置堆的大小,默认为0.5kb
设置中断向量表
复位程序
中断服务函数
堆栈初始化
ARM R13 R14 R15分别是什么?
R13属于是SP寄存器 R14属于是LR寄存器 R15属于是PC寄存器
STM32有几个时钟源?
STM32有五个时钟源:HSI,HSE,LSI,LSE,PLL
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,上电后默认的系统时时钟 SYSCLK = 8MHz,Flash编程时钟。
①、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,可用于独立看门狗IWDG、实时时钟RTC。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
HSE:外部晶振STM32F103C8T6默认是8Mhz (4Mhz~16Mhz)