打印
[应用相关]

获取STM32 MCU的唯一ID

[复制链接]
980|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 | 只看该作者
直接从地址位取地址,非常不错

使用特权

评论回复
5
更多更合适ii| | 2024-10-2 21:44 | 只看该作者
STM32F30X 的起始地址是 0x1FFFF7AC

使用特权

评论回复
6
mollylawrence| | 2024-10-11 22:09 | 只看该作者
STM32微控制器(MCU)通常内置了一个唯一的设备标识码(Unique Device ID,UDID),这个标识码在制造过程中被编程,并且对于每个设备都是唯一的。这个UDID可以用于安全认证、设备追踪、或者其他需要唯一识别设备的应用。

使用特权

评论回复
7
Stahan| | 2024-10-13 21:06 | 只看该作者
为什么起始地址不统一啊?

使用特权

评论回复
8
uytyu| | 2024-10-16 14:54 | 只看该作者
在基于寄存器级别的编程时,可以通过类似的指针操作来读取这些寄存器的值。

使用特权

评论回复
9
maudlu| | 2024-10-16 21:05 | 只看该作者
这个唯一ID位于备份域的特定地址范围内,例如0x1FFF 7A10 - 0x1FFF 7A2F。

使用特权

评论回复
10
plsbackup| | 2024-10-17 14:34 | 只看该作者
可以通过直接访问这些寄存器来获取唯一 ID。

使用特权

评论回复
11
beacherblack| | 2024-10-18 17:04 | 只看该作者
STM32 MCU的唯一ID通常是一个96位的二进制序列

使用特权

评论回复
12
wengh2016| | 2024-10-18 19:18 | 只看该作者
使用适当的寄存器访问方法来读取UID。通常,UID可以以字节(8位)、半字(16位)或全字(32位)的方式读取

使用特权

评论回复
13
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)
    {
    }
}

使用特权

评论回复
14
abotomson| | 2024-10-20 14:33 | 只看该作者
在实际应用中,获取到的唯一 ID 可以用于设备识别、加密、软件授权等多种用途。

使用特权

评论回复
15
mnynt121| | 2024-10-20 21:00 | 只看该作者
获取UID后, 可以将其用于各种目的,例如作为产品的序列号、用于加密或安全机制等

使用特权

评论回复
16
xiaoyaodz| | 2024-10-21 18:24 | 只看该作者
获取STM32 MCU的唯一ID可以通过访问特定的内存地址来实现。

使用特权

评论回复
17
vivilyly| | 2024-10-21 22:13 | 只看该作者
唯一 ID 存储在 96 位(3 个 32 位寄存器)中,寄存器地址为0x1FFF7A10、0x1FFF7A14和0x1FFF7A18。

使用特权

评论回复
18
claretttt| | 2024-10-23 21:06 | 只看该作者
请参考具体芯片的数据手册。              

使用特权

评论回复
19
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];  
    }  
}  

使用特权

评论回复
20
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);
    }
}

使用特权

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

本版积分规则

1923

主题

15596

帖子

11

粉丝