在 STM32F103 系列中,全球唯一 ID(96位,即12字节)存储在系统存储区中。这个 ID 在芯片出厂时烧录,只读不可改

对于 STM32F103C8T6,UID 的基地址是 0x1FFFF7E8。 它由 3 个 32位(4字节)的寄存器组成,连续排列:

  • U_ID[0]0x1FFFF7E8 (低32位)
  • U_ID[1]0x1FFFF7EC (中32位)
  • U_ID[2]0x1FFFF7F0 (高32位)


#include "stm32f10x.h" // 如果是HAL库,换成 stm32f1xx_hal.h
#include <stdio.h>

// 定义 UID 基地址 (查阅数据手册 STM32F103 Reference Manual 得知)
#define UID_BASE_ADDRESS  0x1FFFF7E8

typedef struct {
    uint32_t id[3];
} ChipID_t;

/**
 * @brief  获取芯片唯一ID
 * @param  pID: 用于存放ID的结构体指针
 */
void Get_Chip_UID(ChipID_t *pID)
{
    // 强制类型转换,将地址转换为 uint32_t 指针并取值
    pID->id[0] = *(__IO uint32_t*)(UID_BASE_ADDRESS);
    pID->id[1] = *(__IO uint32_t*)(UID_BASE_ADDRESS + 4);
    pID->id[2] = *(__IO uint32_t*)(UID_BASE_ADDRESS + 8);
}

// 测试函数
int main()
{
    ChipID_t myID;
    Get_Chip_UID(&myID);
    
    // 打印出来看看 (假设你已经重定向了 printf 到串口)
    // 输出格式示例: UID: 20036453 43566123 00018742
    printf("Chip UID: 0X%X 0X%X 0X%X\r\n", myID.id[0], myID.id[1], myID.id[2]);
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐