芯片的独有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 函数 ==
*******************************************************************************/
void main(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"
void Show_Unique_Device_ID(void)
{
u32 Dev_Serial0, Dev_Serial1, Dev_Serial2;
Dev_Serial0 = *(vu32*)(0x1FFFF7E8);
Dev_Serial1 = *(vu32*)(0x1FFFF7EC);
Dev_Serial2 = *(vu32*)(0x1FFFF7F0);
// 至此 已经从内存获取了Unique_Device_ID 用3个32位的变量
u8 HEX[6] ={'A','B','C','D','E','F'};
u8 Unique_Device_ID[25];
Unique_Device_ID[24] = '\0';
u8 HexTmp, H_HexTmp,L_HexTmp;
for(u8 i=0;i<24;)
{
if( 0==i ) HexTmp = (u8)Dev_Serial0; //获取第一个字节
else if( 2==i ) HexTmp = (u8)( Dev_Serial0 >> 8 ); //获取第二个字节
else if( 4==i ) HexTmp = (u8)( Dev_Serial0 >> 16 ); //获取第三个字节
else if( 6==i ) HexTmp = (u8)( Dev_Serial0 >> 24 ); //获取第四个字节
else if( 8==i ) HexTmp = (u8)Dev_Serial1; //获取第五个字节
else if( 10==i ) HexTmp = (u8)( Dev_Serial1 >> 8 ); //获取第六个字节
else if( 12==i ) HexTmp = (u8)( Dev_Serial1 >> 16 ); //获取第七个字节
else if( 14==i ) HexTmp = (u8)( Dev_Serial1 >> 24 ); //获取第八个字节
else if( 16==i ) HexTmp = (u8)Dev_Serial2; //获取第九个字节
else if( 18==i ) HexTmp = (u8)( Dev_Serial2 >> 8 ); //获取第十个字节
else if( 20==i ) HexTmp = (u8)( Dev_Serial2 >> 16 ); //获取第十一个字节
else if( 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"));
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』