STM32启动过程概述
1. STM32启动过程概述
STM32 微控制器的启动过程是指从上电或复位开始,到系统开始执行用户程序的整个过程。这个过程包括了硬件初始化、引导加载程序 (Bootloader) 执行、系统时钟配置、外设初始化等步骤。
2. STM32 启动的基本流程
-
上电或复位
- STM32 芯片的启动过程是从芯片上电或复位信号触发开始的。此时,处理器会从预设的复位向量地址开始执行代码。STM32 通常会有一个硬件复位管理模块(RCC、SysTick、NVIC 等)来处理复位。
-
复位向量和启动代码
- STM32 在上电或复位时,会从 向量表(位于内存的地址
0x00000000或0x08000000)开始执行指令。这个向量表包含了中断服务程序(ISR)和复位处理程序(Reset_Handler)。 - 复位向量指向的是
startup.s汇编文件中的_start函数,它负责执行一些最基础的初始化操作。
- STM32 在上电或复位时,会从 向量表(位于内存的地址
-
设置堆栈指针
- 复位后,STM32 会初始化堆栈指针(
SP),使其指向栈顶(通常位于 SRAM 的末尾),从而为后续的中断和函数调用做好准备。
- 复位后,STM32 会初始化堆栈指针(
-
BSS 和数据段初始化
- 在启动过程中,
startup.s文件会进行静态变量的初始化。所有未初始化的全局变量会被清零(BSS 段),而已初始化的全局变量会从 Flash 区域拷贝到 SRAM 中(Data 段)。 - 这个步骤确保了系统的所有全局变量都能够在
main()函数执行之前准备好。
- 在启动过程中,
-
调用系统初始化函数
- 初始化完内存之后,STM32 会调用
SystemInit()函数,这个函数通常由系统启动文件(如system_stm32f4xx.c)提供。它负责配置系统时钟、外设初始化等。 SystemInit()会进行以下操作:- 配置 时钟系统:STM32 微控制器支持多种时钟源,比如 HSI(高速内部振荡器)、HSE(高速外部振荡器)和 PLL(相位锁定环)。
SystemInit()会选择合适的时钟源并配置时钟树。 - 选择 启动外设:在启动时,STM32 还会启用一些必需的外设(如复位管理器、外部中断控制器等)。
- 配置 时钟系统:STM32 微控制器支持多种时钟源,比如 HSI(高速内部振荡器)、HSE(高速外部振荡器)和 PLL(相位锁定环)。
- 初始化完内存之后,STM32 会调用
-
调用主程序
- 当系统时钟配置完毕且所有的硬件初始化完成后,
Reset_Handler会跳转到main()函数,开始执行应用程序代码。 main()函数是用户程序的入口点,从此刻起,用户可以开始控制和配置外设,进行业务逻辑的编程。
- 当系统时钟配置完毕且所有的硬件初始化完成后,
3. STM32 启动过程中的关键步骤
-
向量表和中断控制:在 STM32 中,复位后,向量表会被加载到内存的地址 0x00000000 或 0x08000000,这取决于引导模式。系统使用中断向量表来管理所有中断和异常。在启动过程中,相关的中断和异常处理函数(如
NMI_Handler,HardFault_Handler等)会被设置为默认值,直到用户自定义它们。 -
时钟系统配置:STM32 微控制器支持多种时钟源,并且时钟配置非常关键,因为它影响到系统的稳定性和性能。时钟配置通常在
SystemInit()函数中完成,设置主系统时钟、外设时钟、PLL 等。 -
外设初始化:虽然大部分外设初始化是在
main()中完成的,但启动过程中会进行一些基本的外设配置,例如启用 GPIO、UART、I2C 等。这是为了确保在程序执行时,外设能够正常工作。 -
中断使能:一旦启动代码完成,NVIC(嵌套向量中断控制器)会配置为允许系统产生中断。这是 STM32 启动过程的关键部分,确保系统能够响应各种外部或内部事件。
4. Bootloader(引导加载程序)
STM32 芯片通常包含一个 Bootloader,它负责在上电时检查是否有用户代码需要加载。在某些情况下,Bootloader 会首先检查主存储器是否有有效的用户代码。如果没有有效的用户程序,系统会启动其他机制(如串口、USB、SD 卡等)加载程序。
- STM32 通常可以选择启动模式(如:默认从内存、从外部存储器启动等)。
- STM32 的 Bootloader 还支持一些更新机制,比如固件更新(DFU,Device Firmware Update)。
5. STM32 启动过程的优化
- 快速启动:一些 STM32 系列支持快速启动功能,可以跳过某些初始化过程,直接进入应用程序。这通常用于低功耗或实时性要求较高的应用场景。
- 硬件初始化的定制化:在用户应用中,硬件初始化的步骤可能需要根据实际应用进行定制。例如,某些外设初始化的顺序或时序可能影响程序的稳定性。
总结
STM32 的启动过程是一个系统化的过程,涵盖了硬件初始化、时钟配置、外设配置等多个方面。通过从复位向量到进入 main() 函数的多步操作,确保了系统的各个部件和外设准备好为用户应用提供服务。理解这一过程对开发 STM32 应用非常重要,尤其是在调试、优化启动时间和进行系统级开发时。
相关文章:
STM32启动过程概述
1. STM32启动过程概述 STM32 微控制器的启动过程是指从上电或复位开始,到系统开始执行用户程序的整个过程。这个过程包括了硬件初始化、引导加载程序 (Bootloader) 执行、系统时钟配置、外设初始化等步骤。 2. STM32 启动的基本流程 上电或复位 STM32 芯片的启动过…...
unity碰撞的监测和监听
1.创建一个地面 2.去资源商店下载一个火焰素材 3.把procedural fire导入到自己的项目包管理器中 4.给magic fire 0 挂在碰撞组件Rigidbody , Sphere Collider 5.创建脚本test 并挂在magic fire 0 脚本代码 using System.Collections; using System.Collections.Generic; usi…...
企业FTP替代升级,实现传输大文件提升100倍!
随着信息技术的飞速发展,网络安全环境也变得越来越复杂。在这种背景下,传统的FTP(文件传输协议)已经很难满足现代企业对文件传输的需求了。FTP虽然用起来简单,但它的局限性和安全漏洞让它在面对高效、安全的数据交换时…...
python基础入门:3.3序列通用操作
Python序列操作终极指南:解锁数据处理的核心技能 # 快速导航 sequence_types ["列表", "元组", "字符串", "字节序列"]一、核心操作三位一体 1. 索引与切片体系 # 通用索引规则 data ["A", "B", &…...
Linux | 自动化构建 —— make / Makefile
文章目录 自动化构建-make/Makefile一、make 工具概述二、Makefile 基本结构三、 Makefile和make的基本使用3.1最基本的gcc编译:3.2make执行Makefile文件3.3.PHONY伪目标 四、Makefile拓展4.1直接根据文件名编写Makefile4.2变量的使用4.3Makefile的适度扩展语法&…...
quartus24.1版本子模块因时钟问题无法综合通过,FPGA过OOC问题复盘
因为只负责一个子模块,所以需要单独对该子模块进行综合和过OOC,这时候已经有一些加虚拟pin文件,敲命令让子模块能过OOC的方法。但这个方法的前提是先过综合,然后再敲命令让虚拟管脚命令成功,最终可以过OOC。 今天负责…...
shell脚本控制——处理信号
Linux利用信号与系统中的进程进行通信。你可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。 1.重温Linux信号 Linux系统和应用程序可以产生超过30个信号。下表列出了在shell脚本编程时会遇到的最常见的Linux系统信…...
【个人开发】macbook m1 Lora微调qwen大模型
本项目参考网上各类教程整理而成,为个人学习记录。 项目github源码地址:Lora微调大模型 项目中微调模型为:qwen/Qwen1.5-4B-Chat。 去年新发布的Qwen/Qwen2.5-3B-Instruct同样也适用。 微调步骤 step0: 环境准备 conda create --name fin…...
电脑开机提示按f1原因分析及终极解决方法来了
经常有网友问到一个问题,我电脑开机后提示按f1怎么解决?不管理是台式电脑,还是笔记本,都有可能会遇到开机需要按F1,才能进入系统的问题,引起这个问题的原因比较多,今天小编在这里给大家列举了比…...
2025华为OD机试真题最新题库 (B+C+D+E卷) + 在线OJ在线刷题使用说明(C++、Java、Python合集)(正在更新E卷,目前已收录581道)
2024年8月份,华为已经开始使用E卷题库,题目和往期一样,旧题加新题的组合,有题目第一时间更新,大家可以跟着继续学习,目前使用复用题较多,可在OJ上直接找到对应的E卷学习,可以放心学习…...
《手札·避坑篇》2025年传统制造业企业数字化转型指南
一、引言 在数字化浪潮的推动下,传统制造业企业正加速向智能化、数字化转型。开源软件技术与制造MES(制造执行系统)产品的结合,为企业提供了高效、灵活且低成本的转型路径。本指南旨在为传统制造业企业的信息化负责人提供一套完整的数字化转型方案,助力企业实现高效、智能…...
Qt+海康虚拟相机的调试
做机器视觉项目的时候,在没有相机或需要把现场采集的图片在本地跑一下做测试时,可以使用海康的虚拟相机调试。以下是设置步骤: 1.安装好海康MVS软件,在菜单栏->工具选择虚拟相机工具,如下图: 2.打开虚拟…...
《Origin画百图》之边际分布曲线图
《Origin画百图》第六集——边际分布曲线图 入门操作可看《30秒,带你入门Origin》 边际分布曲线图,其中包含散点图形,而在图的边际有着分布曲线图。在比较数据以查看多个变量之间是否存在关系时非常有用。 1.数据准备:为多列XY数…...
如何提升自己的能力
提高自身能力是一个长期且综合的过程,需要从多个方面进行努力和持续的学习,以下是一些有效的方法: 明确目标与规划 确定目标:首先要明确自己想要提高哪些方面的能力,例如沟通能力、领导力、专业技能等,并根…...
【ORACLE】这个‘‘和null不等价的场景,deepseek你怎么看?
【ORACLE】一处’和null不等价的场景–to_char(number,varchar2) 背景 最近在做一个国产数据库替代项目,要求将ORACLE迁移到一个openGauss系数据库,迁移后,执行一个存储过程时,发现国产库的执行结果和ORACLE不一致, …...
安全知识之网络扫描器概念与相关技术
网络安全扫描器简介 迅速发展的Internet给人们的生活、工作带来了巨大的方便,但同时,也带来了一些不容忽视的问题,网络信息的安全保密问题就是其中之一。 网络的开放性以及黑客的攻击是造成网络不安全的主要原因。科学家在设计Internet之初就…...
Vim跳转文件及文件行结束符EOL
跳转文件 gf 从当前窗口打开那个文件的内容,操作方式:让光标停在文件名上,输入gf。 Ctrlo 从打开的文件返回之前的窗口 Ctrlwf 可以在分割的窗口打开跳转的文件,不过在我的实验不是次次都成功。 统一行尾格式 文本文件里存放的…...
Termux安装ssh实现电脑ssh
Termux下载 点击下载 在 Termux 中安装并使用 SSH,按照以下步骤操作: 1. 更新软件包列表 pkg update && pkg upgrade2. 安装 OpenSSH pkg install openssh3. 设置 SSH 密码(必须,否则无法使用 SSH 服务器)…...
DeepSeek大模型介绍、本地化部署与使用!【AI大模型】
一、DeepSeek 是什么? 1.技术定位 专注大模型与AGI研究,开发高性能基座模型(如 DeepSeek LLM 系列),支持长文本、多模态、代码生成等复杂任务。 提供开源模型(如 DeepSeek-MoE、DeepSeek-V2)…...
Axios 的原理
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
Gitlab中如何进行仓库迁移
需求:之前有一个自己维护的新仓库A,现在需要将这个仓库提交并覆盖另一个旧的仓库B,需要保留A中所有的commit信息。 1.方法一:将原有仓库A导出后再导入到新的仓库B中 适用场景:新的仓库B是一个待建仓库,相当…...
Android的MQTT客户端实现
在 Android 平台上实现 MQTT 客户端的完整技术方案,涵盖基础实现、安全连接、性能优化和最佳实践: 一、技术选型与依赖配置 推荐库 Eclipse Paho Android Service(官方维护,支持后台运行) gradle 复制 // build.gradl…...
Centos挂载镜像制作本地yum源,并补装图形界面
内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录,后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…...
Thread类以及常见方法
Thread类是JVM用来管理线程的一个类,每个线程都有一个唯一的Thread对象与之关联。 多一个线程,就多一条执行流,每个执行流也要一个对象来描述,而Thread类的对象就是用来描述一个线程的执行流,JVM 会将这些 Thread 对象…...
【蓝桥杯—单片机】第十一届省赛真题代码题解题笔记 | 省赛 | 真题 | 代码题 | 刷题 | 笔记
第十一届省赛真题代码部分 前言赛题代码思路笔记竞赛板配置内部振荡器频率设定键盘工作模式跳线扩展方式跳线 建立模板明确设计要求和初始状态显示功能部分数据界面第一部分第二部分第三部分调试时发现的问题 参数设置界面第一部分第二部分和第四部分第三部分和第五部分 按键功…...
【原创】Android Studio Ladybug 中Gradle配置
使用Android Studio创建项目后,由于需要下载的一下文件在国外,加上网速的问题,以及防火墙的问题,不少文件难以下载。常常导致项目创建后,要等很长时间,各种折腾,结果一个demo都跑不起来。 经过…...
CLion2024.3.2版中引入vector头文件报错
报错如下: 在MacBook端的CLion中引入#include <vector>报 vector file not found(引入map、set等也看参考此方案),首先可以在Settings -> Build,Execution,Deployment -> Toolchains中修改C compiler和C compiler的路…...
自动化测试工具:selenium
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键…...
MR30分布式IO模块:驱动智能制造工厂的工业互联与高效控制新范式
在工业4.0与智能制造浪潮的推动下,传统制造业正经历着从“机械驱动”向“数据驱动”的深刻转型。作为工业数据连接领域的领军者,明达技术凭借其自主研发的MR30分布式IO模块,以创新的技术架构与卓越的性能表现,为全球制造企业构建了…...
计算机领域QPM、TPM分别是什么并发指标,还有其他类似指标吗?
在计算机领域,QPM和TPM是两种不同的并发指标,它们分别用于衡量系统处理请求的能力和吞吐量。 QPM(每分钟请求数) QPM(Query Per Minute)表示每分钟系统能够处理的请求数量。它通常用于衡量系统在单位时间…...
