⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_unique_id.c

📁 STM32 ID加密算法
💻 C
字号:
//按键和LED的测试程序

#include"stm32f10x.h"
#include"init_config.h"
int main()
{	
	u8 i;
   	u32 Dev_Serial0,Dev_Serial1,Dev_Serial2;
	u8 HexTmp, H_HexTmp,L_HexTmp;
	u8 HEX[6] ={'A','B','C','D','E','F'};
	u8 Unique_Device_ID[25];
    Unique_Device_ID[24] = '\0';


	RCC_Configuration();
	GPIO_Configuration();
	NVIC_Configuration();
	USART_Configuration();

	//获取芯片ID
	Dev_Serial0=*(vu32*)(0x1ffff7e8);
	Dev_Serial1=*(vu32*)(0x1ffff7ec);
	Dev_Serial2=*(vu32*)(0x1ffff7f0);



	for(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] = HEX[ H_HexTmp - 10 ];
 	 else
 	     Unique_Device_ID[i] = H_HexTmp + '0';
 	  i+=2;
	}  
	
	USART_ClearFlag(USART1,USART_FLAG_TXE);
	USART_ClearFlag(USART1,USART_FLAG_RXNE);

//	printf("--- The unique ID is: ---\r\n");

	for(i=0;i<3;i++)
   	{
		GPIO_SetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_12);
		GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9);
		delay_nms(200);
		GPIO_ResetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_12);
	 	GPIO_ResetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9);
		delay_nms(200);
	}

	for(i=0;i<24;i++)
	{
//			USART_ClearFlag(USART1,USART_FLAG_TXE);
			USART_SendData(USART1,Unique_Device_ID[i]); 
			delay_nms(2);
//			while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)){}	//等待发送完毕
	}	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -