STM32读取MCU唯一ID和flash信息

1、基本描述

在STM32的全系列MCU中均有一个96位的唯一设备标识符。在ST的相关资料中,对其功能的描述有3各方面:

    用作序列号(例如 USB 字符串序列号或其它终端应用程序)
    在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性
    激活安全自举过程等

在资料中对其特性的描述是:96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。96 位的唯一设备标识符也可以以单字节/半字/字等不同方式读取,然后使用自定义算法连接起来。

想要读取唯一ID,就需要知道它的存储地址,在不同系列的MCU中地址是有差别的,我们查询了部分MCU的资料并将其总结如下:
 

就STM32L151为例获取芯片的UID和flash大小信息代码如下:

/**
  * @brief  get MCU info.
  * @param  para addr. & length
  * @retval True means OK
  */
static uint8_t CLI_MCU_Info(void *para, uint8_t len)
{
    uint16_t flash_size;
    uint32_t MAC_buff[3];

    /* FLASH size */
    flash_size = *(__IO uint16_t *)(0x1FF8004C);
    PRINTF("Flash size: %d KB\r\n", flash_size);

    /* ID */
    MAC_buff[0] = *(__IO uint32_t*)(0x1FF80050);
    MAC_buff[1] = *(__IO uint32_t*)(0x1FF80054);
    MAC_buff[2] = *(__IO uint32_t*)(0x1FF80058);
    PRINTF("UID(hex): %02X-%02X-%02X\r\n", MAC_buff[0], MAC_buff[1], MAC_buff[2]);

    return True;
}

执行后,打印效果为:

如果STM32应用程序中需要用到芯片的flash信息和UID信息的,可出参考这这方式读取使用。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzxjd1314

多谢鼓励,探索前行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值