找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3044|回复: 0
收起左侧

关于stm32f0单片机获取唯一ID的一个好用的函数,可选择长度

[复制链接]
ID:370282 发表于 2018-7-12 15:50 | 显示全部楼层 |阅读模式
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);
        }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表