
产品唯一的身份标识非常适合: ● 用来作为序列号(例如USB字符序列号或者其他的终端应用)● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。4 t. m, e' u3 M- Y' Z- ?" i ● 用来激活带安全机制的自举过程 96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。 这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。& R/ @7 D8 F% e) s 基地址:0x1FFF F7E80 T( C( ]: j' C! H5 f 每个CPU 出厂的时候都 c* O, G% D6 V7 p( w8 z* S 配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......0 D* M3 B0 a& D* b- \4 I% o # P4 ~: W- M9 a: N6 l7 a static u32 CpuID[3];/ a; D& I9 {- X static u32 Lock_Code;" v/ A4 a$ h0 X: |, G9 B4 i K4 _3 B3 ]% ?8 L- l+ S/ ` void GetLockCode(void)/ f b6 N% h! H; |1 q {8 A5 L) w3 T+ `$ ` //获取CPU唯一ID CpuID[0]=*(vu32*)(0x1ffff7e8); CpuID[1]=*(vu32*)(0x1ffff7ec);, F" v: v# a4 u4 x% X. | CpuID[2]=*(vu32*)(0x1ffff7f0); //加密算法,很简单的加密算法3 W/ n, ]- r( v O: N$ m, y Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3); } 然后再用上次所用的 FLASH_ProgramWord(LOCK_ADDR,Lock_Code); 写到FLASH 的某个角落就好了,然后再在程序中验证这个值是否正确。感觉ID的调取很是方便倒是加密算法让人头痛,当然了要是把MD5移植过来应该不是太难。现在市场中这么多的廉价J-link还不是中国牛人xxx.... 产品唯一的身份标识非常适合:
un=(*( u16 *)0x1FFFF7E0); //闪存容量寄存器 printf(" Unique device ID"); un=(*( u16 *)0x1FFFF7EA); [4 B z2 i# j8 E un=(*( u32 *)0x1FFFF7EC); un=(*( u32 *)0x1FFFF7EF);% `& {9 K: m! ]3 C5 Y
转载自:鱼入大海_ 3 u! y* i( T2 [3 c |
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门