获取stm32f103c8t6的芯片ID
·
在 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]);
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)