STM32 ID (转) STM32唯一ID(Unique Device ID)的读取方法

STM32唯一ID(Unique Device ID)的读取方法 (转)

 

    每一个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 12
u8     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;
}
复制代码

    每一个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 12
u8     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;
}
复制代码

猜你喜欢

转载自www.cnblogs.com/yuanhuang32/p/11037966.html