两片STM32L151C8T6,读出来的96位Unique ID完全相同,说好的全球唯一呢?怎么回事?? |
STM32L151RDT6 SDIO读写SD卡 FIFO下溢错误,不知是什么原因
STM32L152 RTC唤醒STOP mode问题
STM32L152系列自带LCD驱动段码液晶屏,怎么驱动想要亮的段亮
STM32L151为何FLASH擦除后全是是0x00?
求助!!STM32L151中的RTC唤醒(wake up)中断问题
STM32L152普通I/O模拟SPI驱动W25Q16问题
STM32L152开发板原理图及说明文档
STM32L1系列,如何释放PA15为普通GPIO端口
STM32L151读取W25Q16的ID错误,请帮忙看看是什么原因
STM32L151 STOP模式唤醒程序跑哪儿了
要是用HAL库的调用一个函数就搞定了
HAL_GetUID(uid);
然后去处理 UID[0] 、 UID[1] 、 UID[2] 就可以了
这个函数具体是
void HAL_GetUID(uint32_t *UID)
{
UID[0] = (uint32_t)(READ_REG(*((uint32_t *)UID_BASE)));
UID[1] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 4U))));
UID[2] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 8U))));
}
我只要用6个字节,所以我的函数是这样的:
// 获取STM32芯片的低48位的UID
void Get_STM32_CAN_UID(void)
{
uint32_t uid[3];
HAL_GetUID(uid);
STM32_CAN_UID[0]=(uid[1]%65536)/256;
STM32_CAN_UID[1]=uid[1]%256;
STM32_CAN_UID[2]=uid[2]/16777216;
STM32_CAN_UID[3]=(uid[2]%16777216)/65536;
STM32_CAN_UID[4]=(uid[2]%65536)/256;
STM32_CAN_UID[5]=uid[2]%256;
}
/*!< Unique device ID registers */
#if defined (STM32L1XX_MD)
#define UID1 ((uint32_t)0x1FF80050)
#define UID2 ((uint32_t)0x1FF80054)
#define UID3 ((uint32_t)0x1FF80064)
#elif defined (STM32L1XX_MDP) || defined (STM32L1XX_HD) || defined (STM32L1XX_XL)
#define UID1 ((uint32_t)0x1FF800D0)
#define UID2 ((uint32_t)0x1FF800D4)
#define UID3 ((uint32_t)0x1FF800E4)
#endif
你把96位都读出来之后发现都是一样的?那你肯定是买到了小作坊生产的假冒伪劣产品()
怀疑你的地址可能有点问题。我帮你看了一下官方手册RM0038,Rev15,p891:
你代码中是连续的96bit,但是文档中偏移地址并不是连续的0x00,0x04和0x14(搞不清楚ST家的脑回路),你核对修改一下你的地址再看看?
评分
查看全部评分
实在没有办法就自己指定FLASH里面固定地址,
自制的一个自己识别的唯一序列号UID,
但是最好PC端有随机序列号生成器这样功能的管理软件,
没有就花钱请人做一个
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
赞!
提醒得对! 注意第3个字的地址。
这个UID的位置布局……脑回路清奇
感谢感谢!!最后32位的地址偏移确实错了,应该是0x1FF80050+0x14, 改完再读就OK了,文档看的不够细啊,惭愧惭愧