赞
踩
每个STM32微控制器都自带一个96位的唯一ID,这个ID在任何情况下都是唯一且不允许修改的,这96位的ID可以以字节(8位)为单位读取,也可以以半字(16位)或全字(32位)读取。不同型号的STM32芯片首地址不同,UID首地址也不同。
/******************************************************************************* * Function Name : Get_MCU_ID * Description : 读取MCU的唯一ID * Input : pMcuID -- ID存放区指针 * Output : McuID * Return : 全字UID * Attention : STM32 96位(12字节)的产品唯一身份标识 基地址:0x1FFF F7E8 *******************/ uint32 Get_MCU_ID(uint8_t* pMcuID) { uint32 CpuID[3] = {0}; //获取CPU唯一ID #if 0//STM32F1系列 CpuID[0] =*(vu32*)(0x1ffff7e8); //按全字(32位)读取 CpuID[1] =*(vu32*)(0x1ffff7ec); CpuID[2] =*(vu32*)(0x1ffff7f0); #endif #if 1//STM32F4系列 CpuID[0]=*(vu32*)(0x1fff7a10); CpuID[1]=*(vu32*)(0x1fff7a14); CpuID[2]=*(vu32*)(0x1fff7a18); // /* printf the chipid */ // rt_kprintf("\r\n芯片的唯一ID为: %X-%X-%X\r\n", // CpuID[0],CpuID[1],CpuID[2]); // rt_kprintf("\r\n芯片flash的容量为: %dK \r\n", *(rt_uint16_t *)(0X1FFF7a22)); #endif //按字节(8位)读取 pMcuID[0] = (uint8_t)(CpuID[0] & 0x000000FF); pMcuID[1] = (uint8_t)((CpuID[0] & 0xFF00) >>8); pMcuID[2] = (uint8_t)((CpuID[0] & 0xFF0000) >>16); pMcuID[3] = (uint8_t)((CpuID[0] & 0xFF000000) >>24); pMcuID[4] = (uint8_t)(CpuID[1] & 0xFF); pMcuID[5] = (uint8_t)((CpuID[1] & 0xFF00) >>8); pMcuID[6] = (uint8_t)((CpuID[1] & 0xFF0000) >>16); pMcuID[7] = (uint8_t)((CpuID[1] & 0xFF000000) >>24); pMcuID[8] = (uint8_t)(CpuID[2] & 0xFF); pMcuID[9] = (uint8_t)((CpuID[2] & 0xFF00) >>8); pMcuID[10] = (uint8_t)((CpuID[2] & 0xFF0000) >>16); pMcuID[11] = (uint8_t)((CpuID[2] & 0xFF000000) >>24); return (CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3); }
可根据MCU的唯一ID读取出MCU的MAC地址。
/*********************************************************************************************** * Function Name : CreateSysMAC * Description : 读取MCU的MAC地址 * Input : None * Output : MAC * Return : None ***********************************************************************************************/ void CreateSysMAC(uint8_t Key, uint8_t* pMacBuf) { uint32 uiMcuId = 0; uint8_t McuID[15] = {0}; int i = 0; uiMcuId = Get_MCU_ID(McuID); for(i=0; i<12; i++) //获取McuID[12] { McuID[12] += McuID[i]; } for(i=0; i<12; i++) //获取McuID[13] { McuID[13] ^= McuID[i]; } pMacBuf[0] = (uint8_t)(uiMcuId & 0xF0); pMacBuf[1] = (uint8_t)((uiMcuId & 0xFF00) >>8); pMacBuf[2] = (uint8_t)((uiMcuId & 0xFF0000) >>16); pMacBuf[3] = (uint8_t)((uiMcuId & 0xFF000000) >>24); pMacBuf[4] = McuID[12]; pMacBuf[5] = McuID[13]; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。