微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32 之 Unique_Device_ID

STM32 之 Unique_Device_ID

时间:12-03 来源:互联网 点击:
芯片的独有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();//配置 NVIC 和 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];//说明一下 貌似论坛过滤了这个符号 所以 我在代码里面+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"));
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top