标题: 关于stm32f0单片机获取唯一ID的一个好用的函数,可选择长度 [打印本页]

作者: fx5700    时间: 2018-7-12 15:50
标题: 关于stm32f0单片机获取唯一ID的一个好用的函数,可选择长度
mbyte可以选择4/8/12/16字节,方便不同项目使用,返回ID在mc_code里面保存

void GetMCCode(uint8_t mbyte,uint8_t *mc_code)  
{       
        uint32_t Lock_Code;
        uint32_t CpuID[3];

        //获取
        CpuID[0]=*(__IO uint32_t*)(0x1ffff7ac);
        CpuID[1]=*(__IO uint32_t*)(0x1ffff7b0);
        CpuID[2]=*(__IO uint32_t*)(0x1ffff7b4);
        //
        if(mbyte==4)
        {
                Lock_Code=(CpuID[0]>>1)^(CpuID[1]>>2)^(CpuID[2]>>3);
                mc_code[0] = (uint8_t)Lock_Code;
                mc_code[1] = (uint8_t)(Lock_Code>>8);
                mc_code[2] = (uint8_t)(Lock_Code>>16);
                mc_code[3] = (uint8_t)(Lock_Code>>24);
        }
        else if(mbyte==8)
        {
                Lock_Code=(CpuID[0]>>1)^(CpuID[1]>>2)^(CpuID[2]>>3);
                //
                mc_code[0] = (uint8_t)Lock_Code;
                mc_code[1] = (uint8_t)(Lock_Code>>8);
                mc_code[2] = (uint8_t)(Lock_Code>>16);
                mc_code[3] = (uint8_t)(Lock_Code>>24);
                //
                Lock_Code = ((CpuID[0]/10-1)*5) + (CpuID[1]>>5) + (CpuID[2]/9+2);
                Lock_Code &= 0xFFFFF7FF;
                //
                mc_code[4] = (uint8_t)Lock_Code;
                mc_code[5] = (uint8_t)(Lock_Code>>8);
                mc_code[6] = (uint8_t)(Lock_Code>>16);
                mc_code[7] = (uint8_t)(Lock_Code>>24);
        }
        else if(mbyte==12)
        {
                mc_code[0] = (uint8_t)CpuID[0];
                mc_code[1] = (uint8_t)(CpuID[0]>>8);
                mc_code[2] = (uint8_t)(CpuID[0]>>16);
                mc_code[3] = (uint8_t)(CpuID[0]>>24);
                //
                mc_code[4] = (uint8_t)CpuID[1];
                mc_code[5] = (uint8_t)(CpuID[1]>>8);
                mc_code[6] = (uint8_t)(CpuID[1]>>16);
                mc_code[7] = (uint8_t)(CpuID[1]>>24);
                //
                mc_code[8] = (uint8_t)CpuID[2];
                mc_code[9] = (uint8_t)(CpuID[2]>>8);
                mc_code[10]= (uint8_t)(CpuID[2]>>16);
                mc_code[11]= (uint8_t)(CpuID[2]>>24);
        }
        else if(mbyte==16)
        {
                mc_code[0] = (uint8_t)CpuID[0];
                mc_code[1] = (uint8_t)(CpuID[0]>>8);
                mc_code[2] = (uint8_t)(CpuID[0]>>16);
                mc_code[3] = (uint8_t)(CpuID[0]>>24);
                //
                mc_code[4] = (uint8_t)CpuID[1];
                mc_code[5] = (uint8_t)(CpuID[1]>>8);
                mc_code[6] = (uint8_t)(CpuID[1]>>16);
                mc_code[7] = (uint8_t)(CpuID[1]>>24);
                //
                mc_code[8] = (uint8_t)CpuID[2];
                mc_code[9] = (uint8_t)(CpuID[2]>>8);
                mc_code[10]= (uint8_t)(CpuID[2]>>16);
                mc_code[11]= (uint8_t)(CpuID[2]>>24);
                //
                Lock_Code = ((CpuID[0]/10-1)*5) + (CpuID[1]>>5) + (CpuID[2]/9+2);
                Lock_Code &= 0xFFFFF7FF;
                //
                mc_code[12] = (uint8_t)Lock_Code;
                mc_code[13] = (uint8_t)(Lock_Code>>8);
                mc_code[14] = (uint8_t)(Lock_Code>>16);
                mc_code[15] = (uint8_t)(Lock_Code>>24);
        }
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1