博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32唯一ID(Unique Device ID)的读取方法
阅读量:2189 次
发布时间:2019-05-02

本文共 1251 字,大约阅读时间需要 4 分钟。

每一个STM32微控制器都自带一个96位的唯一ID,也就是Unique Device ID或称为UID,这个唯一ID在任何情况下都是唯一的且不允许修改。

    在开发过程中,可能需要用到这个UID,比如博主最近在研究的UAVCAN中就用到了UID。那么,这96位ID怎么读取呢?可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。这里需要注意的是UID的首地址问题,因为不同型号的STM32芯片的首地址可能不同。在网上搜索后发现,STM32F103系列MCU的UID首地址是0x1ffff7e8,而STM32F207/STM32F40X系列MCU的UID首地址是0x1fff7a10。由于博主用的芯片型号是STM32F407,这里就贴出实测通过的STM32F407的UID读取代码,是以字节为单位读取的。STM32F103系列只需要把首地址修改为0x1ffff7e8即可。

    下其他系列的芯片的UID首地址,F3系列的UID是0x1ffff7ac,F7系列的UID是0x1ff0f420

#define STM32_UNIQUE_ID_SIZE 12u8     stm32_uniqueId[STM32_UNIQUE_ID_SIZE] = {0}; u8* readStm32UniqueID(void) {            vu8* addr = (vu8*)(0x1fff7a10);   //UID首地址    for(u8 i = 0; i < STM32_UNIQUE_ID_SIZE; ++i)    {        u8 id= *addr;        stm32_uniqueId[i] = id;        ++addr;    }    return stm32_uniqueId;}
/**  * @brief  Returns first word of the unique device identifier (UID based on 96 bits)  * @retval Device identifier  */uint32_t HAL_GetUIDw0(void){  return (READ_REG(*((uint32_t *)UID_BASE)));}/** * This function will get STM32 uid. */void rt_get_cpu_id(rt_uint32_t cpuid[3]){    /* get stm32 uid */    cpuid[0] = HAL_GetUIDw0();    cpuid[1] = HAL_GetUIDw1();    cpuid[2] = HAL_GetUIDw2();}void XXX(void){    uint8_t cpuid[12]={"0000000000"};    rt_get_cpu_id((uint32_t*)cpuid);}

 

转载地址:http://ccuub.baihongyu.com/

你可能感兴趣的文章
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>