|
STM32启动模式 M3/M4/M7等内核复位后,做的第一件事:1 Z' |6 [- M8 @" [1 R 1.从地址 0x0000 0000 处取出 堆栈指针 MSP 的初始值,该值为栈顶地址2.从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量(Reset_Hander) 通过BOOT0和BOOT1两个引脚的输入选择启动模式: K. R' c/ O- E( m. {* B4 J# k 在系统复位后,sysclk的第4个上升沿,BOOT引脚的值将被锁存(锁存后该引脚的值改变不影响已选择模式); E( Q, l9 n# M5 m: ~+ o* ]3 c ) k. l5 [6 s; b- T$ L% q
STM32三种启动模式对应的存储介质均是芯片内置的,它们是:) P1 f( f/ V! A* n 1.用户闪存 = 芯片内置的Flash。从用户闪存启动,这是正常的工作模式。; H3 n8 P& b+ R' p 2.SRAM = 芯片内置的RAM区,就是内存啦。从内置SRAM启动,这种模式可以用于调试8 {) b' L7 o, B. Z5 x) w 3.系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 从系统存储器启动,这种模式启动的程序功能由厂家设置。5 P" Q# X( f" W, g8 v/ n ! {) s% ], ^4 }. W( d; @, l# o' U STM32启动过程(以内部flash启动为例), i7 s, E7 |# W$ S' Q$ J$ b$ ` 总体概述: h5 W, b2 j5 h+ b ) {" B. R9 [) t# q. L/ c4 j( ~" w
启动文件功能. A4 j( {9 j( `+ D2 ^ 启动文件由汇编编写,是系统上电复位后第一个执行的程序。+ W1 c X. A" u, { O) E 启动文件主要做了以下工作: 初始化堆栈指针 SP = _initial_sp (从 0x8000 0000 获取)! o, g/ {; Q. \$ K3 I7 N, u 初始化程序计数器指针 PC = Reset_Handler (从 0x8000 0004 获取) 设置堆和栈的大小 Heap_Size(堆)、Stack_Size(栈)& y9 k) `4 |1 _+ c0 F, k 初始化中断向量表 配置外部 SRAM 作为数据存储器(可选)8 m8 L/ b, R) A, j 配置系统时钟,通过调用 SystemInit 函数(可选)* F& q4 l; ?* } 调用 C 库中的 _main 函数初始化用户堆栈,最终调用 main 函数 启动文件常用汇编指令及说明* o# T( c1 a# h m . I- L; A2 X |, e# y
9 o$ \. z, j. `3 W C. S ———————————————— 版权声明:up up day 如有侵权请联系删除1 J: Z' f _' Z 3 j3 I7 A9 k8 x: k+ G |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版