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

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

[复制链接]
caizhiwei 发布时间:2013-12-6 12:30
  ID号存放在闪存存储器模块的系统存储区域,可以通过JTAG/SWD或者CPU读取。它所包含的芯片识别信息在出厂时编写,用户固件或者外部设备可以读取电子签名,用以自动匹配不同配置的STM32F10xxx微控制器。
' E# n% N' n0 \2 m产品唯一的身份标识的作用:
4 V5 r9 y& t. P% [3 y    ●  用来作为序列号(例如USB字符序列号或者其他的终端应用);8 J- W% c6 G7 D
    ●  用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性;  \+ B! `: B/ U6 W, O$ a( F! N
    ●  用来激活带安全机制的自举过程;5 z$ V9 E+ p: P' `% |. N3 h7 s
     96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。嘿嘿,要注意大端小端模式哟~~~  com.jpg
# L% L8 u. E) {* M//*********************************************************************
. O! h' g2 ?' u' c3 E2 f * 函数名:Get_ChipID
4 s9 `  {% ?' L; n, g9 p$ ^/ \ * 描述  :获取芯片ID
: k, R  D; x6 g# c! Z/ G& G5 F! A * 输入  :无
/ Y( ]. N5 }. ^( s( W * 输出  :无
1 c! p7 }4 x8 X' W * 说明  :96位的ID是stm32唯一身份标识,可以以8bit、16bit、32bit读取, S. i. S1 g) i5 D4 z* a4 ~1 \0 c
           提供了大端和小端两种表示方法
/ f4 e7 ]- s, {8 r& ]3 [- f //********************************************************************2 C" m* |* S# q6 n" |+ Z' J9 V
 
1 u# r; O; R7 [+ V% u9 zvoid Get_ChipID(void)% d* [3 i5 D  n
{
9 W8 W. ~$ y& w#if 1( u% z- [$ J$ a- b/ s
    u32 ChipUniqueID[3];; }" h# m1 H  g( \9 `: W9 ^7 P
    // 地址从小到大,先放低字节,再放高字节:小端模式% \" S1 L+ q: I4 i  E+ J) W( E* u
    // 地址从小到大,先放高字节,再放低字节:大端模式
& m7 U* a8 {) o( {1 x0 \ ChipUniqueID[2] = *(__IO u32*)(0X1FFFF7E8);  // 低字节
: e% y9 u9 z, O ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //  % l3 s0 U- F9 K  o( @' X
 ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节& b# v0 f' q# m# X
 # ^/ S! \+ o. s" ~" w. Y" i
 printf("######## 芯片的唯一ID为: X-X-X \r\n",ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);
0 Y: B. T. p: k+ h8 Z1 K) C 6 J7 c' X; b1 e6 R; `' o
                                               //此条语句输出32位
9 u7 J$ W; @' G' D7 l6 O ! H0 t+ S& R% I+ `
#else   //调整了大小端模式,与ISP下载软件的一致  k7 Q  j4 P) C! X6 S
    u8 temp[12];   
/ O' U% J- k" T, i5 C& x- N    u32 temp0,temp1,temp2; $ M% W( B: Y, P$ T( M) L6 ]
    temp0=*(__IO u32*)(0x1FFFF7E8);    //产品唯一身份标识寄存器(96位)
/ k" x0 k* m' C' x. d* m9 z8 J4 o    temp1=*(__IO u32*)(0x1FFFF7EC);1 x, \2 |% S0 Z/ v
    temp2=*(__IO u32*)(0x1FFFF7F0);4 R. c. U, R0 c+ s0 Y0 }3 K; M
 
  N( B5 C$ |: t6 ^# j# J    temp[0] = (u8)(temp0 & 0x000000FF);
; v2 A" n' o9 c4 `    temp[1] = (u8)((temp0 & 0x0000FF00)>>8);
* i8 T9 s; [2 f5 V8 ^8 z    temp[2] = (u8)((temp0 & 0x00FF0000)>>16);2 b$ e( d$ o) R4 _2 w
    temp[3] = (u8)((temp0 & 0xFF000000)>>24);( k9 M0 `( K; f/ T1 F
 
! u- N" A) g+ F  C$ J) {4 G    temp[4] = (u8)(temp1 & 0x000000FF);8 ?) k! W9 a8 A8 f4 X; A" G$ i& w
    temp[5] = (u8)((temp1 & 0x0000FF00)>>8);4 n7 l! o) D; w& V/ u
    temp[6] = (u8)((temp1 & 0x00FF0000)>>16);
, H+ {" f4 v' L* C9 b    temp[7] = (u8)((temp1 & 0xFF000000)>>24);7 u" ?: J, P0 x. p8 Y- @1 u
 3 u" }$ @* Q& t# }( t
    temp[8] = (u8)(temp2 & 0x000000FF);
( X  [7 N4 }' E6 u) z    temp[9] = (u8)((temp2 & 0x0000FF00)>>8);/ S5 m+ V* r" h( o: c) n7 O2 M
    temp[10] = (u8)((temp2 & 0x00FF0000)>>16);7 `( G  ^5 e: z. f' p  q! Y" J
    temp[11] = (u8)((temp2 & 0xFF000000)>>24);
$ ]. A1 f/ I* j8 d0 l   i  v& i# i8 T9 D
    printf("######## STM32芯片ID为: %.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X \r\n",\: n7 F1 r( a5 D0 F  W. F
    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
* _: S  _: T  z2 k#endif* L* Y( r6 {" A1 n$ M: M/ K/ |
}4 W. |: m* z0 P4 W) c
 
; d. ]4 R1 o6 c/ G+ `//*********************************************************************
3 y: ^6 ?, _  a& t  {* ~ * 函数名:Get_ChipInfo(void)5 W% z. s$ P, k9 A
 * 描述  :获取芯片Flash 大小( r* Z- E& }2 Z5 C8 y8 {
 * 输入  :无1 y' O7 h" o2 h
 * 输出  :无
7 f" m7 s* N2 L4 H * 说明  :8 j( {* Q; b+ @2 z) `1 {2 X% N+ O
// ********************************************************************
5 a6 Z5 u' W- U! [void Get_ChipInfo(void)
; j7 A- O: _% c1 v% Z{1 o0 ?" b6 |5 T) _: P
   uint32_t ChipUniqueID[3];
2 U" `1 J! B6 ?  `  O- ]  u16 STM32_FLASH_SIZE;* T( d/ d4 p% h- y
   ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节5 i; t8 Q& N, U# I0 d- A* n- i
   ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //
( v. P6 f6 A4 b' ]; e) V; A) m   ChipUniqueID[2] = *(__IO u32 *)(0X1FFFF7E8); // 低字节( l0 m$ H- k! r  e1 c% h7 G
   STM32_FLASH_SIZE= *(u16*)(0x1FFFF7E0);    //闪存容量寄存器  
: ]1 Z% d+ H( ~! S1 R. P   printf("\r\n########### 芯片的唯一ID为: %X-%X-%X \n",$ Q) _0 H7 L# @' J+ M7 d/ Y
           ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);  
6 T* S+ W/ f  b% X   /* printf the flash memory amount */
$ T; z" h6 X7 N6 i# W   printf("\r\n########### 芯片flash的容量为: %dK \n", STM32_FLASH_SIZE);- a( F# o( W8 e& w
   printf("\r\n########### 烧录日期: "__DATE__" - "__TIME__"\n"); % R: D. x' g' X# f9 h7 c. ]2 @; b
      //输出使用固件库版本号
$ ~% I/ [2 C: E1 C  printf("\r\n########### 代码固件库版本: V %d.%d.%d \n",__STM32F10X_STDPERIPH_VERSION_MAIN,__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);    + Z4 K6 x. f5 F$ [
}
# V. z. e, c. x- i6 J+ F: A 
; S9 n- `1 c, t4 {* q& M. S 
赞 收藏 评论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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版