STM32 ISP 升级体验

摘要

今天玩了一下STM32的ISP升级,记录一下。

前面一段时间工作在调试其他 ARM 芯片的 Bootloader。 就想看看之前了解的 STM32 的 ISP 升级,但是之前一直没试过。

STM32 启动

之前调试 ARM 启动,知道芯片会有一段 BootRom 程序固化在芯片中,这个程序能够加载程序代码到片上 RAM 执行,程序可能来自外部 Flash 或者 串口实时传输。

然后我看了 STM32 F1 的启动,好像BootRom做的内容很简单,只是做了一个地址映射(也可能是我没看全),分3种启动方式。

BOOT1 BOOT0 启动模式 说明
X 0 主闪存存储器 主闪存存储器被选为启动区域
0 1 系统存储器 系统存储器被选为启动区域
1 1 内置SRAM 内置SRAM被选为启动区域

我们平时使用,都是使用的主闪存存储器。就是用Jlink啥的烧写代码,都是烧在主闪存存储器,至于他怎么用JLink烧进去的,我后面再看看呢。

从主闪存存储器启动:主闪存存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(0x08000000)访问它。

从系统存储器启动:系统存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。

从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。

摘录自(STM32中文参考手册)

先不讨论从内置SRAM启动,也就是说,在芯片的地址 0x08000000 开始存放着用户自己烧写的代码,0x1FFFF000 开始存放着ST官方烧写的一段代码。

我们通过控制BOOT引脚,就能控制哪一段代码被映射到0x00000000去执行。

我测试的是系统存储器启动,所以我将BOOT0置1,BOOT1置0。

系统存储器代码下载

系统存储器代码,复位后,使用串口,偶校验,8位数据位,1位停止位,波特率不固定,他会在你第一次发送指令后,计算实际的波特率。

系统存储器代码包含很多功能,读取设备ID,写闪存数据,读闪存数据,这个协议,官方编写了相应的文档《AN2606》和《AN3155》即可知晓他的读写逻辑。

官方的下载器STM32CubeProgrammer,就是使用的这个协议,做的下载和读写。使用串口连接后,就能够下下载和读取了,简易连接前先复位,

记得将BOOT0置1,BOOT1置0。

连接成功后,他会自己去读一下用户主闪存存储器区域的代码,也就是 0x08000000 开始的代码,你也可以点击那个读自己读。

点击那个+号,就可以导入自己的HEX文件,然后下载。

下载完成后,将启动调整成主闪存存储器启动BOOT0置0,BOOT1置0即可,然后复位就可以看到升级内容了。

后续

这个升级一般应该是用在大量出货的时候吧。

好像这个升级还有什么校验的,后面再关注一下。

资料获取

本项目资料完全开源,包含文档和软件安装包。资料包获取方式:

github : https://github.com/snqx-lqh/ProjectReleasePage

gitee(国内镜像) :https://gitee.com/snqx-lqh/ProjectOpenSourceReleasePage

项目属于 32 的编号 B008 ,在发布页中,找到对应项目获取方式。

相关推荐
shimly12345621 小时前
(done) 嵌入式硬件电路图 (2) 熟悉常用元器件
嵌入式硬件
Zw-awa1 天前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
stm32
花月mmc1 天前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
en.en..1 天前
STM32 HAL 库 | 核心知识点整理
单片机·嵌入式硬件
无敌贵点大王1 天前
从寄存器层面重学STM32(9)——DMA理论
stm32·单片机·嵌入式硬件
希和20271 天前
51 单片机按键控制 LED:江科大课程代码小白笔记
笔记·单片机·嵌入式硬件
Dev_XH2 天前
【成品设计】基于CH32H417的CH32H417AIOT家庭微电网
单片机·嵌入式硬件·物联网·ai
国科安芯2 天前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
国科安芯2 天前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
Zw-awa2 天前
用两个按键做一个OLED菜单:先把选择和执行分开
stm32