获取新塘单片机Nuvoton N76E003唯一识别码UID

2025-11-19 05:38:00

1、【1】打开集成开发环境 Keil uVision4并建立好相应的工程,选择好正确的厂商数据包和单片机型号。建立工程过于简单这里就不说了,不会的小伙伴们可以自行百度搜索,百度上有很多例子,总有一个适合你的。

【2】设置输出.HEX文件。Option for target --> Output --> Creat HEX File勾选,就可以在编译时生成.HEX烧录文件。

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

2、【1】打开新塘Nuvoton N76E003数据手册查看与UID相关的资料和IAP命令。读取UID是通过IAP指令来操作的。

【2】第21章在应用编程(IAP)可以看到IAP命令。可以看到读取UID的地址是0X0000到0X000B,通过IAP就是读到UID。

【3】第26章辅助功能可以看到96位序列号UID详细说明。

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

3、【1】编写串口初始化和配置函数。波特率115200pbs、8位数据位、 1位停止位、 无校验位。

void InitialUART1_Timer3(u32 u32Baudrate)//Initial UART1 Timer3

{

P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmit

P16_Quasi_Mode; //Setting UART pin as Quasi mode for transmit

SCON_1 = 0x50;    //UART1 Mode1,REN_1=1,TI_1=1

T3CON  = 0x08;    //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1

clr_BRCK;

#ifdef FOSC_160000

RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); //16 MHz 

RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1);

#endif

#ifdef FOSC_166000

RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); //16.6 MHz 

RL3 = LOBYTE(65536 - (1037500/u32Baudrate));

#endif

set_TR3;          //Trigger Timer3

TI_1 = 1; //For printf function must setting TI = 1

}

char putchar (char c)//UART1 printf

{

while (!TI_1);//wait until transmitter ready

TI_1 = 0;

SBUF_1 = c;//output character

return (c);

}

【2】编写获取UID函数,并将UID通过串口打印出来。

void vGet_MCU_UID(u8 *id)//vGet MCU UID

{

u8 i = 0;

GLOBAL_INTERRUPT_DISABLE;

IAP_ENABLE;

IAPAH = HIBYTE(MCU_UID_HEAD_ADDERSS);

IAPAL = LOBYTE(MCU_UID_HEAD_ADDERSS);

IAPCN = READ_UID;

for(i=0; i<12; i++)

{  

        IAP_START_PROGRAMEE;

        id[i] = IAPFD;

        IAPAL++;

}

IAP_DISABLE;

GLOBAL_INTERRUPT_ENABLE;

}

【3】编写简单的延时函数,顺便编写Keil相关的宏定义当兵通过串口打印出来。

void delay(u8 i)//delay

{

u8 x=0, y=0;

for(x=0; x<250; x++)

for(y=0; y<i; y++);

}

void vKeil_Macro_Information(void)//vKeil Macro Information

{

printf("Keil Macro Information:\r\n");

printf("uVersion     : 4.72.9.0\r\n");

printf("Date1        : %s\r\n", __DATE__);

printf("Date2        : %s\r\n", __DATE2__);

printf("Time         : %s\r\n", __TIME__);

printf("File         : %s\r\n", __FILE__);

printf("Line         : %d\r\n", __LINE__);

printf("Mode         : %d\r\n", __MODEL__); 

printf("Stdc         : %d\r\n", __STDC__);

printf("uVersion C51 : %d\r\n", __C51__); 

printf("Build Time   : %s  %s\r\n", __DATE__, __TIME__);

【4】编写主函数。编译下载看结果。

void main(void)

{

u8 i=0, datasID[12]={0};

Set_All_GPIO_Quasi_Mode;

InitialUART1_Timer3(115200);//InitialUART1_Timer3

vKeil_Macro_Information();//vKeil Macro Information

while(1)

{

vGet_MCU_UID(datasID);//vGet MCU UID

for(i=0; i<12; i++)

printf("%b02X ", datasID[i]);

printf("\r\n");

delay(250);

}

}

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

4、将程序通过NuMicro ICP Programming Tool软件下载到单片机做,然后通过串口调试助手XCOM V2.0查看效果。

Keil Macro Information:

uVersion     : 4.72.9.0

Date1        : Jan 15 2019

Date2        : 01/15/19

Time         : 15:40:55

File         : ..\User\main.c

Line         : 11799

Mode         : 535

Stdc         : 279

uVersion C51 : 952

Build Time   : Jan 15 2019  15:40:55

02 7E 2C 00 E1 EE 3C 03 B1 E1 00 00 

02 7E 2C 00 E1 EE 3C 03 B1 E1 00 00 

其中02 7E 2C 00 E1 EE 3C 03 B1 E1 00 00 为UID  正是我们所需要的

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

获取新塘单片机Nuvoton N76E003唯一识别码UID

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢