打印
[其他ST产品]

stm32设置唯一MAC地址

[复制链接]
784|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xdvca|  楼主 | 2023-7-26 17:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
stm32参考手册中指出,在地址为0x1FFFF7E8处,有一个唯一的身份标识寄存器。







使用特权

评论回复
沙发
xdvca|  楼主 | 2023-7-26 17:43 | 只看该作者
可以直接访问该值。

printf( "\r\nChip ID: %x, %x, %x\r\n", *(vu32*)(0x1ffff7e8), *(vu32*)(0x1ffff7e8+4), *(vu32*)(0x1ffff7e8+8));

使用特权

评论回复
板凳
xdvca|  楼主 | 2023-7-26 17:44 | 只看该作者
Chip ID: 5d8ff39, 36364e4e, 43137403

使用特权

评论回复
地板
xdvca|  楼主 | 2023-7-26 17:45 | 只看该作者
虽然这个96bit的ID是唯一的,但是MAC地址却只有48bit,因为量产有不同批次,而且采购的很随机的话这个ID号也是不唯一的,比较靠谱一点的还是自己在指定FLASH位置定义一个变量,这样程序就写死去读这个地方的值,而这个地方的值我们再用别的方式去修改,如自己写个上位机用串口通信设置等。

使用特权

评论回复
5
xdvca|  楼主 | 2023-7-26 17:45 | 只看该作者
uint32_t chipID __attribute__((at(0X800F000)))= 0x12345678;
        printf( "\r\nChip ID: %x\r\n", *(vu32*)(0X800F000));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F000));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F001));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F002));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F003));

使用特权

评论回复
6
xdvca|  楼主 | 2023-7-26 17:46 | 只看该作者
这里使用了正点原子的脱机下载器,注释掉该定义变量,并在该处设置滚码。




开始烧录

使用特权

评论回复
7
xdvca|  楼主 | 2023-7-26 17:46 | 只看该作者
串口显示如下:
Chip ID: 55550002

Chip ID: 2

Chip ID: 0

Chip ID: 55

Chip ID: 55

使用特权

评论回复
8
xdvca|  楼主 | 2023-7-26 17:47 | 只看该作者
对应代码如下:
        printf( "\r\nChip ID: %x\r\n", *(vu32*)(0X800F000));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F000));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F001));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F002));
        printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F003));


MAC地址的前12bit固定,后面的便可以直接如此自定义设置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

357

帖子

0

粉丝