目录
STM32出现硬件错误(HardFault_Handler)可能有以下原因:
STM32三种启动模式
STM32上电或者复位后,代码区始终从0x00000000开始,三种启动模式其实就是将各自存储空间的地址映射到0x00000000中。
(1)从Flash启动,将主Flash地址0x08000000映射到0x00000000,这样代码启动之后就相当于从0x08000000开始。
(2)从RAM启动,将RAM地址0x20000000映射到0x00000000,这样代码启动之后就相当于从0x20000000开始。
(3)从系统存储器启动。首先控制BOOT0 BOOT1管脚,复位后,STM32与上述两种方式类似,从系统存储器地址0x1FFF F000开始执行代码。系统存储器存储的其实就是STM32自带的bootloader代码,在bootloader中提供了UART1的接口,通过此接口可以将用户所需的程序代码下载到主Flash中,下载完毕后,此时程序代码已经存储在主Flash当中,这时切换启动模式(从主Flash启动),复位后所执行的就是刚刚下载到Flash中的代码了。
STM32启动过程
1、上电复位,CPU从0x00000000处获取栈顶指针MSP(默认使用主堆栈),从0x00000004处获取程序计数器PC(复位向量)。
2、MSP指针必然指向SRAM区的,因为堆栈必须建立在该区。
3、根据PC的值找到复位中断处理函数Reset_Handler
4、调用SystemInit函数。
5、调用__main函数,初始化用户堆栈
6、调用main函数,进入C语言环境
STM32出现硬件错误(HardFault_Handler)可能有以下原因:
(1)数组越界操作;
(2)内存溢出