打印
[应用相关]

stm 32 自举模式 读取内部flash

[复制链接]
1108|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一路向北lm|  楼主 | 2020-9-27 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 一路向北lm 于 2020-9-27 22:10 编辑

文中的两个文档给大家   STM32微控制器系统存储器自举模式.pdf (3.84 MB) 基于STM32微控制器引导程序的串口通讯协议应用手册.pdf (1.08 MB)

0.可能你还不知道:

STM32中内嵌了一段自举程序,可能很多人不知道。那段自举程序存放在System memory(系统存储器)中,我们通过配置启动,选择启动系统存储器就可以运行这段程序。

使用特权

评论回复
沙发
一路向北lm|  楼主 | 2020-9-27 21:33 | 只看该作者
1. STM32有三种启动模式:
01.Main Flash memory:主FLASH
02.System memory:系统存储器
03.Embedded SRAM:内置SRAM
三种模式是通过不同配置来实现,一般通过BOOT引脚和BOOT位来配置启动模式。不同的芯片配置有差异,有些芯片没有BOOT1引脚,会结合BOOT位来实现。

使用特权

评论回复
板凳
一路向北lm|  楼主 | 2020-9-27 21:33 | 只看该作者
2.内嵌的自举程序
STM32内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用户不能修改。我们选择System memory(系统存储器)启动模式,就会进入系统存储区执行自举程序,内嵌的自举程序主要用于通过串行、IIC、SPI、USB、CAN等接口与外部通讯。不同型号MCU支持的串行接口不一样,具体请参看应用笔记 AN2606。

使用特权

评论回复
地板
一路向北lm|  楼主 | 2020-9-27 21:34 | 只看该作者
3.自举程序中UART协议
通信就会牵涉到协议,这里也说一下自举程序中 USART 协议。
USART 自举程序命令集:(具体参考官方文档AN3155)

使用特权

评论回复
5
Lovemcu2212| | 2020-9-27 21:34 | 只看该作者
学习学习!

使用特权

评论回复
6
Lovemcu2212| | 2020-9-27 21:35 | 只看该作者
自举程序中UART协议

这个时官方固化好的?

使用特权

评论回复
7
MCUmaker1984| | 2020-9-27 21:40 | 只看该作者
学习学习!

使用特权

评论回复
8
MCUmaker1984| | 2020-9-27 21:41 | 只看该作者
官方文档AN3155

感觉这个文档 写的很好

枚举 也非常清楚!

使用特权

评论回复
9
一路向北lm|  楼主 | 2020-9-27 21:52 | 只看该作者
Get 命令
用户通过 Get 命令可获取自举程序的版本及支持的命令。自举程序接收到 Get 命令后,会将
自举程序版本和支持命令的代码发送给主机

使用特权

评论回复
10
一路向北lm|  楼主 | 2020-9-27 21:52 | 只看该作者
具体如下:

使用特权

评论回复
11
一路向北lm|  楼主 | 2020-9-27 21:52 | 只看该作者
Get Version & Read Protection Status 命令
Get Version & Read Protection Status 命令用于获取自举程序版本及读保护状态。自举程序
接收到此命令后,会将如下信息(版本、使能和禁止读保护的次数)发送给主机。

使用特权

评论回复
12
一路向北lm|  楼主 | 2020-9-27 21:53 | 只看该作者
具体如下:

使用特权

评论回复
13
一路向北lm|  楼主 | 2020-9-27 21:54 | 只看该作者
Get ID 命令
Get ID 命令用于获取芯片 ID(标识)的版本。自举程序接收到此命令后,会将产品 ID 发送给主机。

使用特权

评论回复
14
一路向北lm|  楼主 | 2020-9-27 21:54 | 只看该作者
具体如下:

使用特权

评论回复
15
一路向北lm|  楼主 | 2020-9-27 21:55 | 只看该作者
Read Memory 命令
Read Memory 命令用于从 RAM、 Flash 和信息块(系统存储器或选项字节区域)中的任何
有效存储器地址(参见注释)读取数据。(读的前提是Flash没有加读保护操作)

使用特权

评论回复
16
一路向北lm|  楼主 | 2020-9-27 21:55 | 只看该作者
具体如下:(读取flash 0x 08000000 开始的16个字节的数据)

使用特权

评论回复
17
一路向北lm|  楼主 | 2020-9-27 21:55 | 只看该作者
Go 命令
Go 命令用于从应用程序指定的地址开始执行已下载的代码或其它任何代码。自举程序接收
到 Go 命令后,会将 ACK 字节发送到应用程序。发送 ACK 字节后,自举程序会等待一个地
址(4 个字节,字节 1 表示地址 MSB,字节 4 表示 LSB)和一个校验和字节,然后检查接
收到的地址。如果接收到的地址有效且校验和正确,则自举程序将发送一个 ACK 字节,否
则将发送一个 NACK 字节并中止此命令。

使用特权

评论回复
18
一路向北lm|  楼主 | 2020-9-27 21:56 | 只看该作者
具体如下:使用go 跳转到 flash地址处执行 (0x08000000),此时LED已经闪烁

使用特权

评论回复
19
一路向北lm|  楼主 | 2020-9-27 21:56 | 只看该作者
命令太多,其它的就不再介绍了!

使用特权

评论回复
20
一路向北lm|  楼主 | 2020-9-27 22:01 | 只看该作者
5.自举程序上位机(自己使用Qt编写的,主要用于测试)
01. 在自举模式下可以简单实现对内部flash的数据的读出(flash不加锁)
02. 在自举模式下可以简单实现对内部sram的数据的读出(flash不加锁)
03.可以生成对应的.hex文件,使用Qt自己设计算法实现。
04.下载部分暂且没有做。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

3760

帖子

75

粉丝