究竟如何读STM32的UID ?

2020-03-13 19:22发布

本帖最后由 dabendan001 于 2019-6-9 15:50 编辑

方法一:

char * GetChipUniqueID_Str_STM32F10x(char* stm32id_StrBuf_32char )
{   
    uint32_t chipUniqueID32[3];
    chipUniqueID32[2] = *(__IO uint32_t*)(0X1FFFF7F0);
    chipUniqueID32[1] = *(__IO uint32_t*)(0X1FFFF7EC);
    chipUniqueID32[0] = *(__IO uint32_t*)(0X1FFFF7E8);

    snprintf(stm32id_StrBuf_32char,32,"0x%X-%X-%X", chipUniqueID32[0],chipUniqueID32[1],chipUniqueID32[2]);
    return stm32id_StrBuf_32char;
}


读得的UID是:0x5DBFF30-43084562-43084562

方法二:

uint32_t * GetSTM32MCUIDPMing(uint32_t *id,MCUTypedef type)
{
        // type =1, idAddr[type] =0x1FFFF7E8;
        if(id!=NULL)
        {
                id[0]=*(uint32_t*)(idAddr[type]);
                id[1]=*(uint32_t*)(idAddr[type]+4);
                id[2]=*(uint32_t*)(idAddr[type]+8);
        }
        
        //printf(" STM32_ID_Str(inside):0X%X-%X-%X ",id[0],id[1],id[2]);
        return id;
}


读得的UID是:0x20009068-8000165-800016D;

为何 不相同呢??(这两个函数,写在在工程中不同的.C文件中)

 

8条回答
18720952974
1楼 · 2020-03-14 18:15.采纳回答
楼主需要注意idAddr变量的类型,如果是uint32_t只需要(idAddr[type]+1),而你(idAddr[type]+4)就得不到想要的位置了
airwill
2楼-- · 2020-03-14 00:02
id[0]=*(uint32_t*)(idAddr[type]);   应该是   id[0]=*(uint32_t*)(&idAddr[type]);
linqing171
3楼-- · 2020-03-14 02:38
除了指针不对,后面加4和加8也加多了。
dabendan001
4楼-- · 2020-03-14 05:33


id[0]=*(uint32_t*)(idAddr[type]);   应该是   id[0]=*(uint32_t*)(&idAddr[type]);


谢谢。我再试试。

dabendan001
5楼-- · 2020-03-14 07:34


除了指针不对,后面加4和加8也加多了。


我看网上好多贴子都是加4和加8呢??总共96BIT……

dabendan001
6楼-- · 2020-03-14 09:37
 精彩回答 2  元偷偷看……
airwill
7楼-- · 2020-03-14 11:36
可能吧, 不知道你的 MCUTypedef  是怎么定义的

一周热门 更多>