32单片机软件程序启动流程

32单片机(以HC32F460为例,简称460)的软件程序主要在main函数中进行编辑,但是在上电后且还未进入main函数前,芯片还有一系列的操作,理解这段过程有助于功能开发和问题排查。

  1. 通过boot引脚选择启动模式
    460的boot引脚为PB11,引脚接高电平为从 Flash 启动,低电平为从 BOOT 启动。
    一般设计好的460电路板都会将boot引脚拉高,从而在flash中加载程序。460在flash中读取程序的起始地址为0(逻辑地址直接对应物理地址),而STM32的起始地址一般在0x08000000(逻辑地址0对应0x08000000)。
    以下(2)-(4)步其实就是startup_hc32f460.s中做的事。
  2. 程序先定义好栈区和堆区的默认大小。
  3. 从地址0x00000000读取 __initial_sp 初始栈顶值到MSP(Main Stack Pointer)
    因为程序烧入flash之后,是通过二进制数存放的,而存放在最开始地址上的就是初始栈顶指针,所以程序会读取这个指针,赋给MSP。
  4. 从地址0x00000004读取 Reset_Handler 地址到PC
    紧接在后面的是中断向量表,排在第一个的是复位中断处理函数Reset_Handler,PC指针会指向这里,运行这个中断处理函数,默认的Reset_Handler函数会导入SystemInit 和__main两个函数。
    以下步骤可以参考下图。
  5. 运行SystemInit 函数
    函数功能主要是一些寄存器配置的工作,例如配置初始化FPU,外部SRAM,中断向量表(根据用户设置的地址)等。
  6. 运行__main函数
    __main是 ARM 编译器内置的库函数,而非用户编写的代码,因此在工程源码中看不到。功能为:初始化RW段、ZI段,即全局变量和静态变量;对堆栈区等区域的初始化;调用用户主函数main
  7. 运行main函数
相关推荐
d111111111d3 小时前
使用STM32 HAL库配置ADC单次转换模式详解
笔记·stm32·单片机·嵌入式硬件·学习
boneStudent3 小时前
STM32智能温湿度监测系统完整代码
stm32·单片机·嵌入式硬件
炸膛坦客3 小时前
Cortex-M3-STM32F1 开发:(三十八)DMA详细介绍(2):软件触发、数据传输流向、宏观流程图
stm32·单片机·嵌入式硬件·dma
雅欣鱼子酱4 小时前
Type-C 终端应用里 给产品增加PD快充取电 PD取电诱骗芯片有什么推荐?
人工智能·单片机·芯片·电子元器件
菩提祖师_4 小时前
基于单片机指纹密码门禁的设计与实现
数据库·单片机·嵌入式硬件
广州灵眸科技有限公司4 小时前
瑞芯微(EASY EAI)RV1126B RTC使用
单片机·物联网·实时音视频
三佛科技-134163842125 小时前
SM7055-18 输出18V 250mA低成本非隔离BUCK、 BUCK-BOOST方案典型应用电路(电磁炉方案)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
d111111111d5 小时前
STM32 I2C通信详解:从机地址 vs 寄存器地址
笔记·stm32·单片机·嵌入式硬件·学习·模块测试
q_30238195565 小时前
宇树机器人又刷第一!具身智能靠强化学习解锁直立行走与快速奔跑
人工智能·python·单片机·机器人·ai编程