洋桃电子STM32F407单片机入门教程笔记12:芯片ID读取技巧
此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接:第31集)芯片ID读取_哔哩哔哩_bilibili
STM32单片机虽然是批量生产的芯片,但每个芯片都有一组全球唯一的ID编码,像身份证一样刻在芯片存储器里不能更改。每个芯片ID码由96位二进制数组成,存放在3个32位寄存器里,只要读取单片机中固定的3个地址就能读出芯片ID,芯片ID可以作为产品硬件的序列号,还可用于加密算法,使每个产品都有独立密码,还可用于防止程序被他人复制,只要在程序运行时读取芯片ID,并判断是不是正确的ID范围,不在范围内就停止运行,即使他人得到HEX文件下载到新的芯片,由于芯片ID不符合就无法运行,防止了盗版。
从96位芯片ID寄存器表中可以得知,芯片ID寄存器的第一组的地址是0x1FFF7A10,第二组偏移0x04即0X1FFF7A14,第三组偏移0x08即0x1FFF7A18。三组内容都都是出厂前编程的不允许我们用户修改。
1. 芯片ID读取
由于芯片ID是存放在Flash空间中的数据,所以不需要进行CubeMX设置,也不需要调用HAL库函数,只要直接使用指令读取Flash中的地址即可。
在主函数开始处的第72行创建一个用于存放3个32位ID的数组,在需要读取芯片ID的地方添加第102~104行,直接从3个固定地址中读出数据,读出数据是32位的,每个系列单片机的芯片ID所在地址有所不同,读取其他芯片之前要先在《参考手册》上确认芯片ID的地址,第105行将读出的芯片ID显示在超级终端上。
2. 实验现象
开发板重启后显示芯片ID。
作者:嘴角那抹倔强的微笑