芯片的独有ID号,能够用来对芯片进行加密。
包括函数:
(1)Main
+ 试验渠道 : 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
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”));
}