你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

究竟如何读取STM32的UID ?

[复制链接]
dabendan001 提问时间:2019-6-9 12:51 /
本帖最后由 dabendan001 于 2019-6-9 15:51 编辑

方法一:
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("\r\nSTM32_ID_Str(inside):0X%X-%X-%X\r\n",id[0],id[1],id[2]);
        return id;
}

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

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

<
收藏 评论15 发布时间:2019-6-9 12:51

举报

15个回答
toofree 回答时间:2019-6-10 10:25:19
如果主程序中给stm32id_StrBuf_32char和id都分配了空间的话,似乎两段程序都没问题。
还是硬件仿真看一下相应寄存器的值是多少吧。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

songshiqun2010 回答时间:2019-6-10 11:08:55
从代码看  有个__IO (volatile) 禁止编译器优化的区别。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

回答时间:2019-6-10 11:12:46
楼主用的什么库,每个系列的ID地址是不同的。以对应的用户手册为主。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

butterflyspring 回答时间:2019-6-10 12:10:19
仿真一下,单步调式看,最直接  对照手册,注意地址

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

五哥1 回答时间:2019-6-10 16:29:44
能否把源码发上来,这个没法重现问题,也就没有办法猜了。测试的环境信息也没有呀

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

maxtch 回答时间:2019-6-11 08:53:18
这两种方法并不一致。另外,我推荐用 memcpy 来读。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

天臆弄人 回答时间:2019-6-11 11:15:02
2个函数功能效果是一样的,如果不同,肯定是指针地址,传参搞错了,看下你第二个方法,读出来的是什么数据,读出来的是FLASH 内部的应用程序数据。你这读的是以0x800000 开始的某位置去了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

dabendan001 回答时间:2019-6-12 09:02:35
安 发表于 2019-6-10 11:12
楼主用的什么库,每个系列的ID地址是不同的。以对应的用户手册为主。

谢谢
每个系列的STM32地址是不同。我用的是STM32F105RB,地址是  0x1ffff7e8
dabendan001 回答时间:2019-6-12 09:04:40
天臆弄人 发表于 2019-6-11 11:15
2个函数功能效果是一样的,如果不同,肯定是指针地址,传参搞错了,看下你第二个方法,读出来的是什么数据 ...

函数内部用了printf()打印出结果呢。就这,两个写法,结果就不相同。所以我郁闷了,来发贴求援。
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版