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

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

[复制链接]
caizhiwei 发布时间:2013-12-6 12:30
  ID号存放在闪存存储器模块的系统存储区域,可以通过JTAG/SWD或者CPU读取。它所包含的芯片识别信息在出厂时编写,用户固件或者外部设备可以读取电子签名,用以自动匹配不同配置的STM32F10xxx微控制器。
产品唯一的身份标识的作用:
      用来作为序列号(例如USB字符序列号或者其他的终端应用)
      用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性;
      用来激活带安全机制的自举过程;
     96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8)为单位读取,也可以以半字(16)或者全字(32)读取。嘿嘿,要注意大端小端模式哟~~~  com.jpg
//*********************************************************************
 * 函数名:Get_ChipID
 * 描述  :获取芯片ID
 * 输入  :无
 * 输出  :无
 * 说明  96位的IDstm32唯一身份标识,可以以8bit16bit32bit读取
           提供了大端和小端两种表示方法
 //********************************************************************
 
void Get_ChipID(void)
{
#if 1
    u32 ChipUniqueID[3];
    // 地址从小到大,先放低字节,再放高字节:小端模式
    // 地址从小到大,先放高字节,再放低字节:大端模式
 ChipUniqueID[2] = *(__IO u32*)(0X1FFFF7E8);  // 低字节
 ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); // 
 ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节
 
 printf("######## 芯片的唯一ID: X-X-X \r\n",ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);
 
                                               //此条语句输出32
 
#else   //调整了大小端模式,与ISP下载软件的一致
    u8 temp[12];   
    u32 temp0,temp1,temp2;
    temp0=*(__IO u32*)(0x1FFFF7E8);    //产品唯一身份标识寄存器(96位)
    temp1=*(__IO u32*)(0x1FFFF7EC);
    temp2=*(__IO u32*)(0x1FFFF7F0);
 
    temp[0] = (u8)(temp0 & 0x000000FF);
    temp[1] = (u8)((temp0 & 0x0000FF00)>>8);
    temp[2] = (u8)((temp0 & 0x00FF0000)>>16);
    temp[3] = (u8)((temp0 & 0xFF000000)>>24);
 
    temp[4] = (u8)(temp1 & 0x000000FF);
    temp[5] = (u8)((temp1 & 0x0000FF00)>>8);
    temp[6] = (u8)((temp1 & 0x00FF0000)>>16);
    temp[7] = (u8)((temp1 & 0xFF000000)>>24);
 
    temp[8] = (u8)(temp2 & 0x000000FF);
    temp[9] = (u8)((temp2 & 0x0000FF00)>>8);
    temp[10] = (u8)((temp2 & 0x00FF0000)>>16);
    temp[11] = (u8)((temp2 & 0xFF000000)>>24);
 
    printf("######## STM32芯片ID: %.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X \r\n",\
    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
#endif
}
 
//*********************************************************************
 * 函数名:Get_ChipInfo(void)
 * 描述  :获取芯片Flash 大小
 * 输入  :无
 * 输出  :无
 * 说明 
// ********************************************************************
void Get_ChipInfo(void)
{
   uint32_t ChipUniqueID[3];
  u16 STM32_FLASH_SIZE;
   ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节
   ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //
   ChipUniqueID[2] = *(__IO u32 *)(0X1FFFF7E8); // 低字节
   STM32_FLASH_SIZE= *(u16*)(0x1FFFF7E0);    //闪存容量寄存器  
   printf("\r\n########### 芯片的唯一ID: %X-%X-%X \n",
           ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);  
   /* printf the flash memory amount */
   printf("\r\n########### 芯片flash的容量为: %dK \n", STM32_FLASH_SIZE);
   printf("\r\n########### 烧录日期: "__DATE__" - "__TIME__"\n");
      //输出使用固件库版本号
  printf("\r\n########### 代码固件库版本: V %d.%d.%d \n",__STM32F10X_STDPERIPH_VERSION_MAIN,__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);    
}
 
 
收藏 评论7 发布时间:2013-12-6 12:30

举报

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

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

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

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

谢谢分享
陈子建-2001061 回答时间: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
版本号那没看明白。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

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