owen_chen-30573 发表于 2018-11-12 11:35:39

STM32L151C8T6 读出的UID重复!!!

两片STM32L151C8T6,读出来的96位Unique ID完全相同,说好的全球唯一呢?怎么回事??

发表于 2018-11-12 11:45:24

我几十片都出过,不知道怎么解决。

奏奏奏 发表于 2018-11-12 13:44:23

本帖最后由 奏奏奏 于 2018-11-12 13:45 编辑

实在没有办法就自己指定FLASH里面固定地址,
自制的一个自己识别的唯一序列号UID,
但是最好PC端有随机序列号生成器这样功能的管理软件,
没有就花钱请人做一个

MrJiu 发表于 2018-11-12 13:47:16

可以用烧写器的自加在指定位置的flash来实现!!!感觉也阔以!!!

owen_chen-30573 发表于 2018-11-12 13:58:09

ID的生成方法很多,最便捷的无疑就是用MCU的UID,我纳闷的是这么大一个厂怎么能出这种错误呢

stm1024 发表于 2018-11-12 14:18:19

本帖最后由 stm1024 于 2018-11-12 21:04 编辑

你把96位都读出来之后发现都是一样的?那你肯定是买到了小作坊生产的假冒伪劣产品(;P)
怀疑你的地址可能有点问题。我帮你看了一下官方手册RM0038,Rev15,p891:



你代码中是连续的96bit,但是文档中偏移地址并不是连续的0x00,0x04和0x14(搞不清楚ST家的脑回路),你核对修改一下你的地址再看看?

奏奏奏 发表于 2018-11-12 15:13:35

本帖最后由 奏奏奏 于 2018-11-12 15:18 编辑

要是用HAL库的调用一个函数就搞定了:lol
HAL_GetUID(uid);
然后去处理 UID 、 UID 、 UID 就可以了

这个函数具体是
void HAL_GetUID(uint32_t *UID)
{
UID = (uint32_t)(READ_REG(*((uint32_t *)UID_BASE)));
UID = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 4U))));
UID = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 8U))));
}
我只要用6个字节,所以我的函数是这样的:

//        获取STM32芯片的低48位的UID
void Get_STM32_CAN_UID(void)
{
    uint32_t uid;
    HAL_GetUID(uid);

                STM32_CAN_UID=(uid%65536)/256;

                STM32_CAN_UID=uid%256;

                STM32_CAN_UID=uid/16777216;

                STM32_CAN_UID=(uid%16777216)/65536;

                STM32_CAN_UID=(uid%65536)/256;

                STM32_CAN_UID=uid%256;

}

freeelectron 发表于 2018-11-12 15:46:34

uid肯定不会重复的,找原厂分析看看,是不是买到假货了

youxia 发表于 2018-11-12 18:51:10

记得以前看到过一篇帖子说F0系列也出现过这样的情况。

sincomaster 发表于 2018-11-12 23:33:00

这个还有假货一说,晕菜哟
页: [1] 2
查看完整版本: STM32L151C8T6 读出的UID重复!!!