STM32学习之:读取芯片的唯一标识ID

来源:互联网 发布:淘客采集软件 编辑:程序博客网 时间:2024/05/16 12:55

产品唯一的身份标识的作用:

      用来作为序列号(例如USB字符序列号或者其他的终端应用)

      用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性;

      用来激活带安全机制的自举过程;

     96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8)为单位读取,也可以以半字(16)或者全字(32)读取。嘿嘿,要注意大端小端模式哟~~~

以下是相关代码:

* 函数名: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  rn",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 rn",

  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("rn########### 芯片的唯一ID: %X-%X-%X n",

           ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);  

   printf("rn########### 芯片flash的容量为: %dK n", STM32_FLASH_SIZE);

   printf("rn########### 烧录日期: "__DATE__" - "__TIME__"n");

      //输出使用固件库版本号

  printf("rn########### 代码固件库版本: V %d.%d.%d n",__STM32F10X_STDPERIPH_VERSION_MAIN,__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);  

}

 


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开实体童装店没人买怎么办 宝宝一岁半了还不会说话怎么办 十个月宝宝不吃辅食怎么办 八个月宝宝不吃米糊怎么办 八个月宝宝不吃辅食怎么办 六个月宝宝不吃米粉怎么办 4个月婴儿积食怎么办 黑色的衣服泛红怎么办 不听劝的人该怎么办 牛仔裙子腰大了怎么办 天猫店铺降权怎么办 淘宝做文胸的标题要怎么办 秋衣弹力衣服松了怎么办 假离婚变成真的怎么办 百家利钱不到账怎么办 皮鞋撑大了怎么办变小 鞋穿着走路掉跟怎么办 浅口帆布鞋大了怎么办 布鞋后鞋跟老掉怎么办 穿坡跟凉鞋容易打滑摔倒怎么办 运动鞋烂了个口怎么办 运动鞋的网烂了怎么办 运动鞋鞋一个一个高一个低怎么办 淘宝预售水果不发货怎么办 淘宝评价忘记晒图了怎么办 参加水果展没有实物怎么办 没做过运营面试怎么办 苹果5s16g内存满了怎么办 618天猫有活动淘宝没有怎么办 天猫国际买到假货怎么办 天猫恶意差评怎么办 天猫删除差评被扣分了怎么办 天猫收到差评怎么办 天猫给差评骚扰怎么办 天猫客户差评怎么办 天猫没法给差评怎么办 天猫上限购一件怎么办 拍下商品不发货怎么办 天猫红包过期了怎么办 买天猫店被中介骗了钱怎么办 速卖通假货纠纷怎么办