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

获取stm32序列号编译器版本等信息

[复制链接]
caizhiwei 发布时间:2013-12-6 12:30
  ID号存放在闪存存储器模块的系统存储区域,可以通过JTAG/SWD或者CPU读取。它所包含的芯片识别信息在出厂时编写,用户固件或者外部设备可以读取电子签名,用以自动匹配不同配置的STM32F10xxx微控制器。; R: e, P- v! C* r; A
产品唯一的身份标识的作用:2 E  I6 w, u# ]4 V8 c
      用来作为序列号(例如USB字符序列号或者其他的终端应用)9 i* P/ Y, k! |" z- J
      用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性;& L( ~- ]1 w( Y% \3 ^5 @
      用来激活带安全机制的自举过程;5 W; [0 ^2 U# C' {6 w5 Z5 E
     96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8)为单位读取,也可以以半字(16)或者全字(32)读取。嘿嘿,要注意大端小端模式哟~~~  com.jpg : R) m, ~" i) _, h6 l
//*********************************************************************' z+ a8 n$ N/ b, z( t; a: Z
 * 函数名:Get_ChipID5 [# _9 {$ ~% @
 * 描述  :获取芯片ID, j( q3 f  h5 V  T% ?1 Q0 C
 * 输入  :无
. B$ L1 H; @/ G+ D1 b' e * 输出  :无
7 S) g2 L) [, C* O% K * 说明  96位的IDstm32唯一身份标识,可以以8bit16bit32bit读取
7 x) \5 n( A. q) ~           提供了大端和小端两种表示方法% }) X- d- E8 x" I# n
 //********************************************************************7 o7 m: `) H/ i0 v" [1 y0 l- m
 - ?: b& T; e" Z& h% {" |8 z
void Get_ChipID(void)
( W# h0 w: E4 I6 E{
1 R1 m, r) o; u) O: l6 d' C#if 1
+ }4 C: `5 Z1 Y, J    u32 ChipUniqueID[3];" _% n7 `' e( ^0 a; f, H( h& V% j
    // 地址从小到大,先放低字节,再放高字节:小端模式
& {) W3 I# l' ]" ^( H    // 地址从小到大,先放高字节,再放低字节:大端模式
5 g& @2 o% N$ ]" Q+ j ChipUniqueID[2] = *(__IO u32*)(0X1FFFF7E8);  // 低字节/ J1 J  x/ e+ f' U0 ~( U
 ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //  : Z8 E0 [+ U% @. o/ Y7 w9 A0 @
 ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节
( D2 C) i6 f9 W$ A( D 
/ o! U: n- x6 j5 t4 V* j4 C printf("######## 芯片的唯一ID: X-X-X \r\n",ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);9 T- l  a/ s& N: r) B
 7 k7 J' g$ i3 E4 O1 B
                                               //此条语句输出32) X. }* D2 C, ]" Y, [9 N
 
: q- S( a+ K2 K$ _. L2 S2 b#else   //调整了大小端模式,与ISP下载软件的一致
8 W5 e& q9 [1 B: i, z0 f/ i    u8 temp[12];   
; K! \: L+ u7 P) o5 i    u32 temp0,temp1,temp2;
1 h+ n9 d9 _/ S# E    temp0=*(__IO u32*)(0x1FFFF7E8);    //产品唯一身份标识寄存器(96位)
9 d+ s# u# @% _7 C$ e    temp1=*(__IO u32*)(0x1FFFF7EC);; E6 }- N: a- v; l) Z" Q- m2 P
    temp2=*(__IO u32*)(0x1FFFF7F0);/ Y5 h& h. G7 D& ~4 \4 }
 
* w1 Z6 V! m+ C! G    temp[0] = (u8)(temp0 & 0x000000FF);6 a# ^; e6 Z; d( Z. s( u
    temp[1] = (u8)((temp0 & 0x0000FF00)>>8);
! d8 [  e# Z' G  O. Y, V$ W' l    temp[2] = (u8)((temp0 & 0x00FF0000)>>16);
, f9 V' [7 p+ c5 n( ~4 G) H    temp[3] = (u8)((temp0 & 0xFF000000)>>24);$ u5 y* h* X$ F6 H
 2 h" j2 x6 Q; L+ q
    temp[4] = (u8)(temp1 & 0x000000FF);, X( r3 X! Z( n; K3 o) g2 ]% q$ g
    temp[5] = (u8)((temp1 & 0x0000FF00)>>8);
) n" a% g4 ^2 p: q, ~    temp[6] = (u8)((temp1 & 0x00FF0000)>>16);; R7 |* \$ M% n2 W; E3 h' m% Y
    temp[7] = (u8)((temp1 & 0xFF000000)>>24);% O$ z: P: w$ L( _
 % B) t! F: Z0 [$ N% s' S2 Q
    temp[8] = (u8)(temp2 & 0x000000FF);6 y( Y& {' H! ~3 \# A, O
    temp[9] = (u8)((temp2 & 0x0000FF00)>>8);6 t" f  l" U& \# ^  R( M
    temp[10] = (u8)((temp2 & 0x00FF0000)>>16);. E" E% _# ]/ z; S
    temp[11] = (u8)((temp2 & 0xFF000000)>>24);% ^% ]* g# ^6 `; b  O0 [
 
. X5 t. i5 S! \. F3 K5 q; s% v5 E! {    printf("######## STM32芯片ID: %.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X \r\n",\
6 m1 q* E$ R& W* P    temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8],temp[9],temp[10],temp [11]); //串口打印出芯片ID) _* e) q: I% T7 H
#endif
1 y  R( a! j5 W$ H}
- b- b5 p. ]: y 
5 f2 F) b- X2 j' B$ Q6 A//*********************************************************************
; Q5 N% H7 B) D9 p  ~& c * 函数名:Get_ChipInfo(void)
( C* t  ^# e1 _$ [! w& v * 描述  :获取芯片Flash 大小
# n+ x  y  ^1 w: U5 ~ * 输入  :无
8 t( e. V, I5 A$ ~* ^& {" r * 输出  :无. @3 `$ G6 e( C' G; b% G; M/ @
 * 说明  8 y& d  B, i3 P" h6 h; @
// ********************************************************************
" h% _9 h; V2 Z. A4 Pvoid Get_ChipInfo(void)2 e& Y) m/ {$ \8 s
{
1 T3 v1 F7 X/ W& q0 ?   uint32_t ChipUniqueID[3];# ]9 _! j4 ^* I! Q- E- v* v6 X
  u16 STM32_FLASH_SIZE;* K* x  a; {1 j
   ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节
- e* Q2 O8 \5 V) f! _   ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //
+ C! n5 E: `  \   ChipUniqueID[2] = *(__IO u32 *)(0X1FFFF7E8); // 低字节0 u  t" C4 j/ b" G5 i1 X- G
   STM32_FLASH_SIZE= *(u16*)(0x1FFFF7E0);    //闪存容量寄存器   + o2 s* G8 l6 w2 \/ y
   printf("\r\n########### 芯片的唯一ID: %X-%X-%X \n",+ K' z0 |2 B' @+ I9 ^
           ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);   - |) D6 |" n. O
   /* printf the flash memory amount */) r- y) R1 i; \8 C  J' w
   printf("\r\n########### 芯片flash的容量为: %dK \n", STM32_FLASH_SIZE);1 r! ~( Q' e  X2 h6 a
   printf("\r\n########### 烧录日期: "__DATE__" - "__TIME__"\n"); 4 d* L( l! K2 |( y: Q4 @
      //输出使用固件库版本号
; w5 l0 F* ?. F0 x  printf("\r\n########### 代码固件库版本: V %d.%d.%d \n",__STM32F10X_STDPERIPH_VERSION_MAIN,__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);    
! e1 g- I# n6 f+ Q' i}
7 U: s, B2 h: t; [ 
* g2 J0 ^' H: _: V* |2 ~3 V 
收藏 评论7 发布时间:2013-12-6 12:30

举报

7个回答
沐紫 回答时间:2013-12-6 13:12:09

RE:获取stm32序列号编译器版本等信息

赞一个,多谢村长~
steven陈 回答时间:2013-12-6 15:03:49

RE:获取stm32序列号编译器版本等信息

谢谢分享
steven陈 回答时间:2013-12-6 15:05:41

RE:获取stm32序列号编译器版本等信息

这个是用VC++写了连上芯片的时候运行还是直接写到芯片里面去?
黄毛 回答时间:2013-12-12 22:12:33

RE:获取stm32序列号编译器版本等信息

具体0X1FFFF7F0地址是哪里查到的
继电器控制器 回答时间:2013-12-12 23:05:14

RE:获取stm32序列号编译器版本等信息

好东西,支持,学习中。
赛孔明 回答时间:2014-12-2 09:09:46
温度怎么获取的?
赛孔明 回答时间:2014-12-2 09:11:20
版本号那没看明白。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版