stm32参考手册中指出,在地址为0x1FFFF7E8处,有一个唯一的身份标识寄存器。
- N7 f' X8 T8 W; S7 c$ d5 @3 w5 K/ `3 X5 M' l5 p! ~% ^
# I3 J+ [1 R6 ?
n: ^) d8 _9 S2 A5 q$ W" c
5 ^! y Q5 P' @+ x8 ?
; F! p5 f t% p: W
1 {& _. Q9 A9 [. u) z' U& ?& R2 `" Y8 n0 W' X$ d) b+ X
可以直接访问该值。- printf( "\r\nChip ID: %x, %x, %x\r\n", *(vu32*)(0x1ffff7e8), *(vu32*)(0x1ffff7e8+4), *(vu32*)(0x1ffff7e8+8));
i8 `$ T+ d$ _- \6 B$ c
复制代码- Chip ID: 5d8ff39, 36364e4e, 431374035 ?3 {" U2 G+ j
复制代码 ( [' t# u3 ^( f& a: ^1 E! Y5 r9 h
虽然这个96bit的ID是唯一的,但是MAC地址却只有48bit,因为量产有不同批次,而且采购的很随机的话这个ID号也是不唯一的,比较靠谱一点的还是自己在指定FLASH位置定义一个变量,这样程序就写死去读这个地方的值,而这个地方的值我们再用别的方式去修改,如自己写个上位机用串口通信设置等。
) G+ T5 a* v" R4 Z0 M- uint32_t chipID __attribute__((at(0X800F000)))= 0x12345678;( L' a: b/ S+ X9 J
- printf( "\r\nChip ID: %x\r\n", *(vu32*)(0X800F000));( L7 t3 D" R9 q5 T P9 P) }
- printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F000));
9 Q7 h4 y& I- E* b2 | - printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F001));6 \, y! n/ H/ l( V( \. T' V
- printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F002));6 t- [4 t* Q- E0 k/ `6 @
- printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F003));
" O8 [: n3 ^6 { v! d* F& ]
复制代码
6 d. y& z9 H4 c7 s6 I2 ], w这里使用了正点原子的脱机下载器,注释掉该定义变量,并在该处设置滚码。
- l- B$ M4 P% c# u5 A+ ^% L1 |
4 D* J" [) B5 P
1 f2 I# y }6 r" l1 B4 o开始烧录
, d6 N1 }' m8 R+ L: T& a4 h) M) Y; a. D/ ]: X1 u" i2 { |
5 D7 |8 \1 g6 k
6 E% _! t* }4 h% ^串口显示如下:
1 P/ ^# p0 |* M' y& ?( B& F- Chip ID: 55550002$ l) U/ h1 P: r6 g8 M1 X
/ [3 s& ^1 e H- Chip ID: 2
; x/ i' u. o: ~
: w8 s6 w8 Z/ T' w+ J- t- I- Chip ID: 0
3 C' F5 @1 H8 O - 6 R& h- D0 H( _9 n
- Chip ID: 55
2 K+ c+ ?% j4 M- g+ `" ` - " ]( X1 w' B# u5 J. v. _
- Chip ID: 55$ A; W" ?$ N! Q1 M2 l3 D& m
复制代码 # y* K$ ?' v8 x
对应代码如下:) a" _2 ?# v" F: A% m
- printf( "\r\nChip ID: %x\r\n", *(vu32*)(0X800F000));
* o) S( k( Q6 K) w8 C# f - printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F000));
3 b" |* n% ^" c2 C* ^ - printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F001));
% j, P: M2 D, J - printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F002));# E8 y/ T+ Q- m- [- f4 G/ m
- printf( "\r\nChip ID: %x\r\n", *(vu8*)(0X800F003));
复制代码 MAC地址的前12bit固定,后面的便可以直接如此自定义设置。
' j7 E) D1 X% P2 ]3 ^) q% U————————————————3 Y2 g5 ]. g/ d5 ~. v' K4 o2 N
版权声明:小盼你最萌哒0 w9 I' v i3 x0 M/ p! N) [
如有侵权请联系删除
, o/ x6 T0 K4 a3 v5 Z
7 j2 I" a; Y; C/ G" T% m |