你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32自身唯一ID读取

[复制链接]
STMCU小助手 发布时间:2022-12-17 14:00

产品唯一的身份标识非常适合:

● 用来作为序列号(例如USB字符序列号或者其他的终端应用)6 v0 V. R/ f; k+ n" K0 ^. Y
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
2 S6 |: H& |, u2 N4 r3 h● 用来激活带安全机制的自举过程  C! d! v' c+ J( D7 [8 A& U
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。% R* I: h; o/ Z6 I
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
* i4 I( P' ]/ w4 O4 T基地址:0x1FFF F7E8
- E5 l- o( A8 k1 _4 h
0 I" C6 W  n  H# C3 ?0 s; U每个CPU 出厂的时候都
1 i, v) y, }7 ^配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......9 _3 U' g  D+ e1 T* ^
+ Z1 n" K, \6 g# J
static u32 CpuID[3];
0 Q" n1 C  c* s8 Astatic u32 Lock_Code;
; W: Z7 S  K2 O8 u  F0 V% Q* c+ \4 R) F. A& }+ P
void GetLockCode(void)! Y  A3 W# N# X# C! H
{  ~- q' g5 P0 c% |0 E
//获取CPU唯一ID
' e3 C2 g1 M; n- C& C, g& ZCpuID[0]=*(vu32*)(0x1ffff7e8);
5 i7 u- p4 l# {4 o/ ~6 KCpuID[1]=*(vu32*)(0x1ffff7ec);
8 Y- |" K5 p; M: U2 B7 O+ h  qCpuID[2]=*(vu32*)(0x1ffff7f0);# ]. N! Y; K9 g& M9 _1 [2 m
//加密算法,很简单的加密算法
% x) b) E, J, e! ]Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);# V+ K7 B: h% |+ S% ^
}
; Q; y$ i* ~; |6 }- B* X- k% v* M" X* N

然后再用上次所用的 FLASH_ProgramWord(LOCK_ADDR,Lock_Code); 写到FLASH 的某个角落就好了,然后再在程序中验证这个值是否正确。感觉ID的调取很是方便倒是加密算法让人头痛,当然了要是把MD5移植过来应该不是太难。现在市场中这么多的廉价J-link还不是中国牛人xxx....

) q  q$ h! O, u: L" P# T3 H$ N

产品唯一的身份标识非常适合:1 s3 Z9 \# {. n- x9 Q& V- m
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)$ [! h& }! W8 q, F
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。3 y/ q6 o* S4 i- @$ |& `
● 用来激活带安全机制的自举过程2 n' w# ~) h0 g% ^
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
0 Q* t+ p' @4 X% s7 [! @这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。

- T% L0 u3 x+ W! O7 k; `

un=(*( u16 *)0x1FFFF7E0);   //闪存容量寄存器
, [/ C0 I3 C. \, c3 `2 A, }4 [printf(" The Flash size: %d KB\r\n",un);   

printf(" Unique device ID");
; T( x, C/ K+ O- t! q+ Dun=(*( u16 *)0x1FFFF7E8);   //产品唯一身份标识寄存器(96位)" k7 U0 A, p) n; Z# d  l; D
printf(" U_ID[15:0]: %d\r\n",un);

un=(*( u16 *)0x1FFFF7EA);
# V: Z3 {1 L5 t$ T  `printf(" U_ID[31:16]: %d\r\n",un);

un=(*( u32 *)0x1FFFF7EC);- W+ Y( o! m- d+ @% z4 {
printf(" U_ID[63:32]]: %d\r\n",un);  

un=(*( u32 *)0x1FFFF7EF);1 F: n+ B1 u# ~6 f4 z+ {
printf(" U_ID[95:64]: %d\r\n",un);


: F! j0 p: c" t! v$ H; i5 w) t

转载自:鱼入大海_

$ \1 y7 G; f- D% l3 V2 h5 S0 `
赞 收藏 评论0 发布时间:2022-12-17 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版