究竟如何读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文件中)
id=*(uint32_t*)(idAddr); 应该是 id=*(uint32_t*)(&idAddr); 除了指针不对,后面加4和加8也加多了。 airwill 发表于 2019-6-10 11:30
id=*(uint32_t*)(idAddr); 应该是 id=*(uint32_t*)(&idAddr);
谢谢。我再试试。 linqing171 发表于 2019-6-11 08:06
除了指针不对,后面加4和加8也加多了。
我看网上好多贴子都是加4和加8呢??总共96BIT…… airwill 发表于 2019-6-10 11:30
id=*(uint32_t*)(idAddr); 应该是 id=*(uint32_t*)(&idAddr);
实践证明,加“&”与不加,值相同。 可能吧, 不知道你的 MCUTypedef是怎么定义的 本帖最后由 dabendan001 于 2019-6-16 22:50 编辑
airwill 发表于 2019-6-15 16:55
可能吧, 不知道你的 MCUTypedef是怎么定义的
我是参照这里的代码写的。
https://blog.csdn.net/foxclever/article/details/80294516
(向版主表示歉意。纯技术交流。) 楼主需要注意idAddr变量的类型,如果是uint32_t只需要(idAddr+1),而你(idAddr+4)就得不到想要的位置了
页:
[1]