STM32L151C8T6 读出的UID重复!!!
两片STM32L151C8T6,读出来的96位Unique ID完全相同,说好的全球唯一呢?怎么回事??我几十片都出过,不知道怎么解决。 本帖最后由 奏奏奏 于 2018-11-12 13:45 编辑
实在没有办法就自己指定FLASH里面固定地址,
自制的一个自己识别的唯一序列号UID,
但是最好PC端有随机序列号生成器这样功能的管理软件,
没有就花钱请人做一个 可以用烧写器的自加在指定位置的flash来实现!!!感觉也阔以!!! ID的生成方法很多,最便捷的无疑就是用MCU的UID,我纳闷的是这么大一个厂怎么能出这种错误呢 本帖最后由 stm1024 于 2018-11-12 21:04 编辑
你把96位都读出来之后发现都是一样的?那你肯定是买到了小作坊生产的假冒伪劣产品(;P)
怀疑你的地址可能有点问题。我帮你看了一下官方手册RM0038,Rev15,p891:
你代码中是连续的96bit,但是文档中偏移地址并不是连续的0x00,0x04和0x14(搞不清楚ST家的脑回路),你核对修改一下你的地址再看看?
本帖最后由 奏奏奏 于 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;
}
uid肯定不会重复的,找原厂分析看看,是不是买到假货了 记得以前看到过一篇帖子说F0系列也出现过这样的情况。 这个还有假货一说,晕菜哟
页:
[1]
2