您的位置 首页 基础

STM32 之 Unique_Device_ID

芯片的独有ID号,可以用来对芯片进行加密。包含函数:(1)MainC语言:Codee#14694/*++++++++++++++++++++++++++++++++++++++++++++++++++

芯片的独有ID号,能够用来对芯片进行加密。

包括函数:

(1)Main

C言语:Codee#14694
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 试验渠道 : ST 官方三合一套件
+ 硬件 : STM32F103C8T6
+ 开发渠道 : IAR For ARM 5.40
+ 仿真器 : J-Link
+ 日期 : 2010-10-28
+ 频率 :HSE = 8MHz ,主频 = 72MHz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#include “includes.h”
/*******************************************************************************
== 变量声明 ==
*******************************************************************************/

/*******************************************************************************
== Main 函数 ==
*******************************************************************************/
voidmain(void)
{
RCC_Configuration();//装备体系时钟
NVIC_Configuration();//装备 NV%&&&&&% 和 Vector Table
SysTick_Config();//装备SysTick的准确延时

GPIO_Configuration();
UART1_Configuration();

LED1_HIGH;LED2_HIGH;LED3_HIGH;LED4_HIGH;// 初始化让灯全灭

//=== 经过串口发送芯片ID号 ======================================

Uart1_PutString(” The Unique Device ID is : “,27);
Show_Unique_Device_ID();

while(1);
}

()Unique_Device_ID.c

C言语:Codee#14695
#include “includes.h”

voidShow_Unique_Device_ID(void)
{
u32Dev_Serial0,Dev_Serial1,Dev_Serial2;
Dev_Serial0=*(vu32*)(0x1FFFF7E8);
Dev_Serial1=*(vu32*)(0x1FFFF7EC);
Dev_Serial2=*(vu32*)(0x1FFFF7F0);

// 至此 现已从内存获取了Unique_Device_ID 用3个32位的变量

u8HEX[6]={A,B,C,D,E,F};
u8Unique_Device_ID[25];
Unique_Device_ID[24]=\0;
u8HexTmp,H_HexTmp,L_HexTmp;

for(u8i=0;i<24;)
{
if(0==i)HexTmp=(u8)Dev_Serial0;//获取第一个字节
elseif(2==i)HexTmp=(u8)(Dev_Serial0>>8);//获取第二个字节
elseif(4==i)HexTmp=(u8)(Dev_Serial0>>16);//获取第三个字节
elseif(6==i)HexTmp=(u8)(Dev_Serial0>>24);//获取第四个字节
elseif(8==i)HexTmp=(u8)Dev_Serial1;//获取第五个字节
elseif(10==i)HexTmp=(u8)(Dev_Serial1>>8);//获取第六个字节
elseif(12==i)HexTmp=(u8)(Dev_Serial1>>16);//获取第七个字节
elseif(14==i)HexTmp=(u8)(Dev_Serial1>>24);//获取第八个字节
elseif(16==i)HexTmp=(u8)Dev_Serial2;//获取第九个字节
elseif(18==i)HexTmp=(u8)(Dev_Serial2>>8);//获取第十个字节
elseif(20==i)HexTmp=(u8)(Dev_Serial2>>16);//获取第十一个字节
elseif(22==i)HexTmp=(u8)(Dev_Serial2>>24);//获取第十二个字节

H_HexTmp=HexTmp>>4;//获取高四位
L_HexTmp=HexTmp&0x0F;//获取低四位

// 假如某四位的值大于9 就运用查表的方法 把ABCDEF写进来 呵呵

if(L_HexTmp>9)
Unique_Device_ID[i+1]=HEX[L_HexTmp-10];
else
Unique_Device_ID[i+1]=L_HexTmp+0;
if(H_HexTmp>9)
Unique_Device_ID[i+0]=HEX[H_HexTmp-10];//阐明一下 形似论坛过滤了【i】这个符号 所以 我在代码里边+0了 呵呵
else
Unique_Device_ID[i+0]=H_HexTmp+0;
i+=2;
}

// 经过串口发送出去
Uart1_PutString(Unique_Device_ID,strlen((char*)Unique_Device_ID));
Uart1_PutString(“\r\n”,strlen(“\r\n”));
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/252219.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部