如何读取STM32的唯一ID


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的唯一ID_第1张图片




因为每款STM32的存储器地址不一样,不同的微控制器型号96bit的ID存储位置不一样,所以需要自行查找STM32的地址,方法很简单,可以从官网或者手册网站下载手册,我喜欢使用的有www.alldatasheet.com这一网站,之后在手册中直接搜索Unique device ID就可以找到所需的地址。




你可能感兴趣的:(STM32)