[应用相关] 获取STM32 MCU的唯一ID

[复制链接]
3214|20
 楼主| tpgf 发表于 2024-9-19 12:53 | 显示全部楼层 |阅读模式
STM32每个系列都会有唯一的一个芯片序列号(96位bit)
STM32F10X 的起始地址是 0x1FFFF7E8
STM32F20X 的起始地址是 0x1FFF7A10
STM32F30X 的起始地址是 0x1FFFF7AC
STM32F40X 的起始地址是 0x1FFF7A10
STM32L0XX 的起始地址是 0x1FF80050
STM32L1XX 的起始地址是 0x1FF80050
STM32L4XX 的起始地址是 0x1FFF7590
STM32H7XX 的起始地址是 0x1FF0F420

获取STM32 MCU序列号
/* 简单粗暴的获取序列号 */
u8 Sys_ID[12];
for(u8 i=0;i<12;i++)
  {
          Sys_ID=*(u8*)(0x1FFF7A10+i);
  }


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/ahphong/article/details/142179414

呐咯密密 发表于 2024-9-19 13:49 | 显示全部楼层
很直接,直接取值就行
ym0sly 发表于 2024-9-23 18:51 来自手机 | 显示全部楼层
STM32F30X 的起始地址是 0x1FFFF7AC
szt1993 发表于 2024-9-23 19:09 | 显示全部楼层
直接从地址位取地址,非常不错
更多更合适ii 发表于 2024-10-2 21:44 来自手机 | 显示全部楼层
STM32F30X 的起始地址是 0x1FFFF7AC
mollylawrence 发表于 2024-10-11 22:09 | 显示全部楼层
STM32微控制器(MCU)通常内置了一个唯一的设备标识码(Unique Device ID,UDID),这个标识码在制造过程中被编程,并且对于每个设备都是唯一的。这个UDID可以用于安全认证、设备追踪、或者其他需要唯一识别设备的应用。
Stahan 发表于 2024-10-13 21:06 | 显示全部楼层
为什么起始地址不统一啊?
uytyu 发表于 2024-10-16 14:54 | 显示全部楼层
在基于寄存器级别的编程时,可以通过类似的指针操作来读取这些寄存器的值。
maudlu 发表于 2024-10-16 21:05 | 显示全部楼层
这个唯一ID位于备份域的特定地址范围内,例如0x1FFF 7A10 - 0x1FFF 7A2F。
plsbackup 发表于 2024-10-17 14:34 | 显示全部楼层
可以通过直接访问这些寄存器来获取唯一 ID。
beacherblack 发表于 2024-10-18 17:04 | 显示全部楼层
STM32 MCU的唯一ID通常是一个96位的二进制序列
wengh2016 发表于 2024-10-18 19:18 | 显示全部楼层
使用适当的寄存器访问方法来读取UID。通常,UID可以以字节(8位)、半字(16位)或全字(32位)的方式读取
usysm 发表于 2024-10-20 12:39 | 显示全部楼层
#include "stm32f1xx_hal.h"

#define UDID_START_ADDRESS 0x1FFF7A10
#define UDID_END_ADDRESS   0x1FFF7A2F

void Get_STM32_UUID(uint8_t* uuid)
{
    for (int i = 0; i < 12; i++)
    {
        uuid[i] = *(uint8_t *)(UDID_START_ADDRESS + i);
    }
}

int main(void)
{
    HAL_Init(); // 初始化HAL库

    uint8_t STM32_UUID[12];
    Get_STM32_UUID(STM32_UUID);

    // 打印或者处理STM32_UUID
    // ...

    while (1)
    {
    }
}
abotomson 发表于 2024-10-20 14:33 | 显示全部楼层
在实际应用中,获取到的唯一 ID 可以用于设备识别、加密、软件授权等多种用途。
mnynt121 发表于 2024-10-20 21:00 | 显示全部楼层
获取UID后, 可以将其用于各种目的,例如作为产品的序列号、用于加密或安全机制等
xiaoyaodz 发表于 2024-10-21 18:24 | 显示全部楼层
获取STM32 MCU的唯一ID可以通过访问特定的内存地址来实现。
vivilyly 发表于 2024-10-21 22:13 | 显示全部楼层
唯一 ID 存储在 96 位(3 个 32 位寄存器)中,寄存器地址为0x1FFF7A10、0x1FFF7A14和0x1FFF7A18。
claretttt 发表于 2024-10-23 21:06 | 显示全部楼层
请参考具体芯片的数据手册。              
sdCAD 发表于 2024-10-23 21:43 | 显示全部楼层

#define UID_ADDR  ((uint32_t*)0x1FFF7A10)  // STM32F4系列UID的起始地址  
  
void GetSTM32MCUID(uint8_t* id) {  
    uint32_t* uid32 = (uint32_t*)UID_ADDR;  
    for (int i = 0; i < 12; i++) {  
        id[i] = ((uint8_t*)uid32)[i];  
    }  
}  
bestwell 发表于 2024-10-25 10:59 | 显示全部楼层

// 函数:获取STM32 MCU的唯一ID
void get_unique_id(uint8_t unique_id[12]) {
    uint32_t* id_ptr = STM32_UNIQUE_ID_ADDRESS;
     
    // 从内存地址读取96位唯一ID,并以字节形式存储
    for (int i = 0; i < 12; ++i) {
        unique_id[i] = (uint8_t)((*id_ptr >> (8 * (11 - i))) & 0xFF);
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2389

主题

17665

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部