RYMCU

如何通过程序读取STM32单片机的型号、FLASH大小以及全球唯一UID?

Hugh 2 年前
# STM32移植 # FLASH容量 # UID # PID # 读取序列号

1 怎么读取 STM32 单片机型号、FLASH 大小以及全球唯一 UID?

  • step1 通过读取 DBGMCU_IDCODE[11:0]获得 PID;
  • step2 通过 PID 确定型号,例如 STM32F1xx;
  • step3 通过型号,确定 FLASH 容量存储器地址;
  • step4 通过地址,获得 FLASH 容量;
  • step5 通过型号,确定 UID 地址,访问地址可获得全球唯一 UID;

上述 5 步即可读取产品名称,容量大小以及 UID!

2 有问题如下

2.1 所有 STM32 系列的 DBGMCU_IDCODE 的地址均为 0xE004 2000?

目前确定 F1、F2、F3、F4 为该地址,F0 地址为 0x40015800,查询官方参考手册结果如下。

0x40015800:
STM32F0x1/STM32F0x2/STM32F0x8
STM32F030x4/x6/x8/xC and STM32F070x6/xB

0xE004 2000:
STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx:
STM32F303xB/C/D/E, STM32F303x6/8, STM32F328x8, STM32F358xC, STM32F398xE
STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439
STM32F72xxx and STM32F73xxx
STM32F75xxx 和 STM32F74xxx
STM32F76xxx and STM32F77xxx
STM32F301x6/8 and STM32F318x8
STM32F302xB/C/D/E and STM32F302x6/8
STM32F401xB/C and STM32F401xD/E
STM32F469xx and STM32F479xx

2.2 DBGMCU_IDCODE 可以通过应用程序访问吗?

可以!查询官方描述如下:

This code is accessible using the JTAG debug pCat.2ort (4 to 5 pins) 
or the SW debug port (two pins) or by the user software.
It is even accessible while the MCU is under system reset.

串口 ISP 时需要获得 Bootloader 版本才可以选择正确的擦除命令,虽然通过 PID 无法直接查找获得,但所有 STM32 系列可通过统一的 GET 命令获得 Bootloader 版本号。

3 STM32 各系列与 FLASH 容量寄存器地址、UID 寄存器地址对应关系

FLASH 容量基地址.png

4 STM32 各系列与 PID、Bootloader 版本(BL ID),RAM 内存范围,系统存储范围对照图

F0.png
F1F3.png
F4F7.png
G0L0.png
L1U5.png

后发布评论