人有身份证,芯片也一样,用在证明自己的身份且是唯一的,每一颗芯片也有属于自己的身份证,即电子签名,STM32用一个96位的产品唯一身份标识寄存器来存放自己的电子签名
用途说明
- 用来作为序列号(例如USB字符序列号或者其他的终端应用)
- 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
- 用来激活带安全机制的自举过程
应用举例
- 根据官方参考手册,该寄存器可读,但不可写,即用户不能进行更改,96 位的唯一设备标识符可以以单字节/半字/字等不同方式读取
- 网上查询资料得到STM32各个系列芯片电子签名的基地址,如下所示
- 采取按字读取,应用举例如下:
//STM32各个系列芯片电子签名的基地址
#include STM32F0_BaseAddr 0x1FFFF7AC //STM32F0唯一ID起始地址
#include STM32F1_BaseAddr 0x1FFFF7E8 //STM32F1唯一ID起始地址
#include STM32F2_BaseAddr 0x1FFF7A10 //STM32F2唯一ID起始地址
#include STM32F3_BaseAddr 0x1FFFF7AC //STM32F3唯一ID起始地址
#include STM32F4_BaseAddr 0x1FFF7A10 //STM32F4唯一ID起始地址
#include STM32F7_BaseAddr 0x1FF0F420 //STM32F7唯一ID起始地址
#include STM32L0_BaseAddr 0x1FF80050 //STM32L0唯一ID起始地址
#include STM32L1_BaseAddr 0x1FF80050 //STM32L1唯一ID起始地址
#include STM32L4_BaseAddr 0x1FFF7590 //STM32L4唯一ID起始地址
#include STM32H7_BaseAddr 0x1FF0F420 //STM32H7唯一ID起始地址
//获取MCU的电子签名
//读取唯一身份识别ID的时候要注意存储方式是小端模式
void GetSTM32MCUID(uint32_t STM32XX_BaseAddr)
{
uint32_t STM32_MCUID[3];
STM32_MCUID[0]=*(uint32_t*)(STM32XX_BaseAddr+8); //ID地址的高32位寄存器地址
STM32_MCUID[1]=*(uint32_t*)(STM32XX_BaseAddr+4); //ID地址的中32位寄存器地址
STM32_MCUID[2]=*(uint32_t*)(STM32XX_BaseAddr); //ID地址的低32位寄存器地址
printf("此芯片的唯一ID为:%d-%d-%d\r\n",STM32_MCUID[0],STM32_MCUID[1],STM32_MCUID[2]);
}
好文分享:
本文参考STM32中文参考手册,若有错误地方欢迎批评指针,若本文对您有所帮助,转发、分享也是笔者坚持的动力