你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32小白入门指南:从基础到OTA实现方案

[复制链接]
flyingstar 发布时间:2025-9-30 14:18
对于初入MCU领域的STM32小白,理解其与SOC的差异是关键入门步骤。本文以STM32 L4为例,对相关基础知识进行全面梳理,助力新手快速上手。
一、MCU与SOC的主要差异
MCU与SOC在架构与应用场景上存在显著差异,这些差异决定了在MCU开发中,许多SOC上的技术理论难以直接沿用。MCU通常集成了处理器内核、存储器和各类外设接口,主要面向嵌入式控制系统,强调实时性和低功耗。而SOC则更侧重于复杂运算与高速数据处理,常见于智能手机、平板电脑等高性能设备。在存储架构、运算能力和功耗管理等方面,MCU与SOC均有本质区别,这要求开发者转变思路,掌握MCU独有的开发技巧与优化策略。
二、STM32的存储架构
  • 无DDR设计 :MCU未配备DDR,代码存储于nor flash,临时变量与栈的运行则依赖SRAM。MCU的CPU频率相对较低,一般在几十MHz到一二百MHz范围,nor flash的读取速度足以满足CPU取指需求。然而,nor flash写入速度较慢,因此引入SRAM作为临时变量和栈的运行空间,以此实现数据的快速读写,保障程序流畅运行。
  • 存储架构优势 :这种架构设计使STM32具备成本低、功耗小的优势,尤其适用于对数据存储容量要求不高,但对实时性和稳定性要求严格的嵌入式应用场景,如智能家居传感器、工业自动化控制器等。在这些场景下,快速响应与低能耗比复杂计算更为关键。

    ( H) z$ R1 w% c- o
三、STM32启动方式详解
STM32提供了三种上电后的引导方式,分别为从flash引导启动、从system memory引导启动以及从SRAM引导启动。
微信图片_2025-09-30_141503_835.png
3 g8 C5 j# ~/ h) Q" n0 I, U5 Qsource: http://www.ingchips.com/news/147.html
不同的启动方式对应着不同的应用场景与配置要求。
  • 从flash引导启动 :这种方式是将预先烧录好的固件程序存储在flash中,上电后CPU直接从flash加载bin文件并运行。它是最常见的启动方式,适用于正常运行用户程序的场景。在产品交付使用后,用户程序稳定运行时,基本都采用此模式启动。
  • 从system memory引导启动 :当flash中的程序被擦除或损坏时,CPU会转而运行MCU出厂自带的一块ROM程序,即bootloader。该bootloader程序可通过串口、I2C、SPI或者USB等通信接口实现对flash的重新烧录,有效防止MCU因flash异常而变砖。STM32 Cube Programmer工具正是利用这段ROM程序,完成对flash的烧录操作,为开发者提供了便捷的程序更新手段。
  • 从SRAM引导启动 :由于SRAM是掉电易失性存储器,因此该模式要求在程序写入SRAM后保持系统不断电,直接切换跳转运行。这种引导方式主要应用于在线仿真场景,方便开发者在开发调试阶段对程序进行实时监控与修改,使用场景相对小众。
  • 这三种启动方式的选择是通过外部的BOOT0 pin或者nSWBOOT0 option bit进行配置的。若boot配置为flash启动,但flash为空,CPU会自动切换至system memory程序运行,这也解释了为何即使flash未写入程序,上电后某些GPIO仍会被配置的现象,这正是内部ROM程序运行的结果。
    微信图片_2025-09-30_141500_320.jpg
    ) B+ a4 P/ O9 C$ g+ m
    可以发现,CPU上电后是从地址 0开始运行的,但地址0 处存放的是什么代码?取决于BOOT configuration,不同的BOOT configuration会导致不同代码映射到0 地址处。
    Flash memory的地址范围是0x08000000 ~ 0x08020000,所以 该MCU所支持挂载的最大flash容量为0x20000 byte,即128KB。flash的烧录地址也只能在这个范围选择。
    四、STM32 OTA实现方案深度剖析
    随着物联网的发展,设备的远程更新(OTA)功能越发重要。以下是针对STM32的几种OTA实现方案,各有优劣,开发者可根据实际需求灵活选择。
    方案一:bootloader + AB分区% E! Y1 P% d8 ^3 g8 g2 W2 `
    • 原理与流程 :将flash划分为三个区,分别是bootloader、A分区和B分区。其中,bootloader分区代码不参与升级,其核心职责是引导分区以及进行升级检查。A分区和B分区大小相同,用于存储需要OTA的业务逻辑代码。在升级过程中,新固件会被写入A或B分区中的一个。重启后,bootloader会根据A、B分区的版本号,跳转至版本较新的分区代码运行。
    • 优势 :该方案的优势在于实现了无感升级,可在正常业务运行时完成升级写入操作,无需进入专门的烧录模式,对用户体验十分友好。同时,具有较高的安全性,即使升级过程中写入flash失败,仍保留有上一个版本的固件可供使用,有效避免了设备变砖的风险。
    • 局限性 :不过,该方案对flash容量要求较高,毕竟需要划分出两个分区用于存储不同版本的业务代码,在flash资源有限的情况下,可能会受到限制。

    • + W8 }- E' a. X2 g  R
      1 h1 m+ F0 E& c9 v" \; v3 e
方案二:bootloader + A分区
! {: P1 B: `: T. X0 D% _
  • 原理与流程 :此方案仅划分bootloader和A分区两个区域。当接收到升级请求时,app程序会跳转执行bootloader代码,由bootloader负责数据接收以及flash烧录工作。烧录完成后,再跳转回app程序执行,从而完成升级过程。
  • 优势 :相较于方案一,该方案节省了一个分区,对flash资源的占用更少,在flash容量有限的场景下更具适用性。
  • 局限性 :然而,该方案要求MCU处于烧录模式才能进行升级操作。一旦烧录失败,设备将无法正常运行,只能重新尝试升级烧录,这在一定程度上增加了升级的风险与复杂性。

  • : z+ ?5 P+ D4 I6 ^1 Z
方案三:直接利用system memory分区进行升级) x3 A" X5 B$ x8 M, I; m
  • 原理与流程 :该方案无需额外编写bootloader代码,而是直接通过重启并利用boot pin引导进入system memory分区,借助内部的ROM代码完成flash烧写操作。

  • 0 M" Z/ |& i( @& J1 G4 c, M$ W

    9 Q0 f# h" D  V) i6 H  t* a! D8 X6 y
微信图片_2025-09-30_141451_454.jpg
  f6 P9 H# a/ J! n0 N; @

8 D+ f, X& w! }+ `1 P
微信图片_2025-09-30_141456_146.jpg

% x9 e% H3 `+ E" U" ~3 i( B1 S
  • 优势 :省去了编写和维护bootloader代码的工作,简化了开发流程。对于一些资源紧张、开发周期较紧的项目,不失为一种快速实现OTA功能的途径。
  • 局限性 :但该方案存在明显缺陷,需要对boot pin进行配置并重启设备,操作风险较大。而且由于system memory中的bootloader是官方固化提供的,无法根据具体需求进行修改,使用上存在诸多不便,在灵活性和可定制性方面表现欠佳。

    / [0 c, E- z7 E1 G# _4 D) |
五、总结与展望
掌握STM32的基本架构与启动方式是入门MCU开发的基石,而根据不同应用场景选择合适的OTA方案,则是实现设备远程高效更新的关键。对于STM32小白而言,深入了解这些基础知识与技术方案,有助于在实际项目开发中做出明智决策,顺利完成从入门到进阶的跨越。
在后续学习过程中,建议新手开发者多动手实践,通过搭建开发环境、编写简单程序、调试运行等方式,加深对STM32的感性认识。同时,积极查阅官方文档、参考优秀开源项目,不断拓宽知识面与视野,逐步积累开发经验,从而在MCU领域实现稳步成长与进步。

  P4 o( @! ~# y3 c
$ ]# U1 J7 T: u& M) x  \1 t
$ H$ w' }' F/ }3 A) h
; G9 E2 T0 T1 g# F& Y# Z
$ ^' b  W: L; V5 d. L* f1 t
+ s. g1 T2 M/ g# n4 Q
收藏 评论0 发布时间:2025-9-30 14:18

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版