STM32的微控制器设计有唯一的ID,每个ID都具备有不可修改和唯一性,这一点在基本的程序防解密上很有效果,ID结合加密的程序可以有效增加破解的难度和成本。
读取ID以STM32F469为例:
ID存储在共96位的只读地址(寄存器)内,因此使用三个32位无符号整数读取,当然使用8或者16位读取也都是可以的。这里因为已经构建了一个stemwin框架,因此使用GUI_xxxx函数打印获取的代码
CpuID[0]=*(uint32_t*)(0x1FFF7A10);
CpuID[1]=*(uint32_t*)(0x1FFF7A10+sizeof(uint32_t));
CpuID[2]=*(uint32_t*)(0x1FFF7A10+sizeof(uint32_t)*2);
GUI_GotoXY(415,400);
GUI_DispDecMin(CpuID[0]);
GUI_GotoXY(415,424);
GUI_DispDecMin(CpuID[1]);
GUI_GotoXY(415,448);
GUI_DispDecMin(CpuID[2]);
在DEBUG下查看存储也可以看到Device ID
因为每款STM32的存储器地址不一样,不同的微控制器型号96bit的ID存储位置不一样,所以需要自行查找STM32的地址,方法很简单,可以从官网或者手册网站下载手册,我喜欢使用的有www.alldatasheet.com这一网站,之后在手册中直接搜索Unique device ID就可以找到所需的地址。