dabendan001 发表于 2019-6-9 12:52

究竟如何读STM32的UID ?

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

方法一:
char * GetChipUniqueID_Str_STM32F10x(char* stm32id_StrBuf_32char )
{   
    uint32_t chipUniqueID32;
    chipUniqueID32 = *(__IO uint32_t*)(0X1FFFF7F0);
    chipUniqueID32 = *(__IO uint32_t*)(0X1FFFF7EC);
    chipUniqueID32 = *(__IO uint32_t*)(0X1FFFF7E8);

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

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

方法二:
uint32_t * GetSTM32MCUIDPMing(uint32_t *id,MCUTypedef type)
{
      // type =1, idAddr =0x1FFFF7E8;
      if(id!=NULL)
      {
                id=*(uint32_t*)(idAddr);
                id=*(uint32_t*)(idAddr+4);
                id=*(uint32_t*)(idAddr+8);
      }
      
      //printf("\r\nSTM32_ID_Str(inside):0X%X-%X-%X\r\n",id,id,id);
      return id;
}

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

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

airwill 发表于 2019-6-10 11:30

id=*(uint32_t*)(idAddr);   应该是   id=*(uint32_t*)(&idAddr);

linqing171 发表于 2019-6-11 08:06

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

dabendan001 发表于 2019-6-14 00:06

airwill 发表于 2019-6-10 11:30
id=*(uint32_t*)(idAddr);   应该是   id=*(uint32_t*)(&idAddr);

谢谢。我再试试。

dabendan001 发表于 2019-6-14 00:07

linqing171 发表于 2019-6-11 08:06
除了指针不对,后面加4和加8也加多了。

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

dabendan001 发表于 2019-6-15 11:30

airwill 发表于 2019-6-10 11:30
id=*(uint32_t*)(idAddr);   应该是   id=*(uint32_t*)(&idAddr);

实践证明,加“&”与不加,值相同。

airwill 发表于 2019-6-15 16:55

可能吧, 不知道你的 MCUTypedef是怎么定义的

dabendan001 发表于 2019-6-16 22:48

本帖最后由 dabendan001 于 2019-6-16 22:50 编辑

airwill 发表于 2019-6-15 16:55
可能吧, 不知道你的 MCUTypedef是怎么定义的
我是参照这里的代码写的。
https://blog.csdn.net/foxclever/article/details/80294516
(向版主表示歉意。纯技术交流。)

18720952974 发表于 2019-12-3 16:02

楼主需要注意idAddr变量的类型,如果是uint32_t只需要(idAddr+1),而你(idAddr+4)就得不到想要的位置了
页: [1]
查看完整版本: 究竟如何读STM32的UID ?