[其他ST产品] stm32设置唯一MAC地址

[复制链接]
1554|7
 楼主| xdvca 发表于 2023-7-26 17:43 | 显示全部楼层 |阅读模式
stm32参考手册中指出,在地址为0x1FFFF7E8处,有一个唯一的身份标识寄存器。


8246564c0ea8ddc405.png

541664c0eaa72b163.png
6461264c0eab08194c.png

 楼主| xdvca 发表于 2023-7-26 17:43 | 显示全部楼层
可以直接访问该值。

  1. printf( "\r\nChip ID: %x, %x, %x\r\n", *(vu32*)(0x1ffff7e8), *(vu32*)(0x1ffff7e8+4), *(vu32*)(0x1ffff7e8+8));
 楼主| xdvca 发表于 2023-7-26 17:44 | 显示全部楼层
  1. Chip ID: 5d8ff39, 36364e4e, 43137403
 楼主| xdvca 发表于 2023-7-26 17:45 | 显示全部楼层
虽然这个96bit的ID是唯一的,但是MAC地址却只有48bit,因为量产有不同批次,而且采购的很随机的话这个ID号也是不唯一的,比较靠谱一点的还是自己在指定FLASH位置定义一个变量,这样程序就写死去读这个地方的值,而这个地方的值我们再用别的方式去修改,如自己写个上位机用串口通信设置等。
 楼主| xdvca 发表于 2023-7-26 17:45 | 显示全部楼层
  1. uint32_t chipID __attribute__((at(0X800F000)))= 0x12345678;
  2.         printf( "\r\nChip ID: %x\r\n", *(vu32*)(0X800F000));
  3.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F000));
  4.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F001));
  5.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F002));
  6.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F003));
 楼主| xdvca 发表于 2023-7-26 17:46 | 显示全部楼层
这里使用了正点原子的脱机下载器,注释掉该定义变量,并在该处设置滚码。

6208564c0eb5513aa0.png


开始烧录
525464c0eb6b27c54.png
 楼主| xdvca 发表于 2023-7-26 17:46 | 显示全部楼层
串口显示如下:
  1. Chip ID: 55550002

  2. Chip ID: 2

  3. Chip ID: 0

  4. Chip ID: 55

  5. Chip ID: 55
 楼主| xdvca 发表于 2023-7-26 17:47 | 显示全部楼层
对应代码如下:
  1.         printf( "\r\nChip ID: %x\r\n", *(vu32*)(0X800F000));
  2.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F000));
  3.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F001));
  4.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F002));
  5.         printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F003));


MAC地址的前12bit固定,后面的便可以直接如此自定义设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

453

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部