0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【笔记】单片机的“身份证号码”实现的三种方式

撞上电子 2023-05-30 09:32 次阅读

许多IC芯片都具有唯一的身份码(或序列号),用于识别和区分不同的芯片。以下是一些常见的IC芯片具有身份码的类型、优势以及针对每种芯片的读取身份码的示例程序:

1.AT24C02 EEPROM芯片
软件环境和库:Arduino IDE、Wire库。


#include
#define EEPROM_ADDR 0x50
void setup() { Wire.begin(); // 初始化Wire库 Serial.begin(9600);}
void loop() { Wire.beginTransmission(EEPROM_ADDR); Wire.write(0xFA); // 身份码存储地址 Wire.endTransmission();
Wire.requestFrom(EEPROM_ADDR, 4); // 请求读取4个字节的数据 while (Wire.available()) { byte data = Wire.read(); Serial.print(data < 0x10 ? "0" : ""); Serial.print(data, HEX); Serial.print(" "); } Serial.println(); delay(1000);}

注释和分析:

通过Wire库与AT24C02 EEPROM芯片进行I2C通信

将EEPROM芯片的I2C地址设置为0x50。

在循环中,首先开始I2C传输并写入读取身份码的地址0xFA。

接着请求从EEPROM芯片读取4个字节的数据。

使用Wire.available()检查是否有可用的数据,并逐个读取字节。

打印每个字节的值(如果小于0x10,在前面补0)。

延迟1秒钟后,再次执行读取操作。

型号:AT24C02

优势:低功耗、可靠性高、容量适中(2K位),适用于存储配置信息产品序列号等。

2.STM32系列MCU芯片

软件环境和库:STM32Cube HAL库。

#include "stm32f1xx_hal.h"#include
void SystemClock_Config(void);
int main(void) { HAL_Init(); SystemClock_Config();
uint32_t uniqueID[3];
uniqueID[0] = HAL_GetUIDw0(); uniqueID[1] = HAL_GetUIDw1(); uniqueID[2] = HAL_GetUIDw2();
printf("Unique ID: %08X-%08X-%08X\n", uniqueID[2], uniqueID[1], uniqueID[0]);
while (1) { // 主程序其他逻辑 }}
void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;
__HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);}

注释和分析:

使用STM32Cube HAL库进行开发。

在主函数中,初始化系统和时钟,获取MCU的唯一身份码(通过HAL_GetUIDw0、HAL_GetUIDw1和HAL_GetUIDw2函数)。

使用printf函数打印身份码。

在while循环中可以添加其他主程序逻辑。

SystemClock_Config函数配置MCU的时钟设置。

型号:STM32F103C8T6

优势:高性能、丰富的外设接口,适用于嵌入式系统工业自动化等领域。

3.RFID芯片 MFRC522:

软件环境和库:Arduino IDE、MFRC522库。

#include #include
MFRC522 mfrc522(10, 9); // 定义MFRC522模块的RST和SS引脚
void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); // 初始化MFRC522模块}
void loop() { if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { Serial.print("UID: "); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); // 打印UID的每个字节,不足两位前面补0 Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); mfrc522.PICC_HaltA(); }}

注释和分析:

使用MFRC522库和SPI库与MFRC522 RFID芯片进行通信。

在setup函数中,初始化串口、SPI和MFRC522模块。

在循环中,检测是否有新的RFID卡片出现,并读取卡片的序列号(UID)。

逐个字节打印UID,并在不足两位时前面补0。

打印完UID后,通过mfrc522.PICC_HaltA()命令使RFID卡片进入休眠状态。

型号:MFRC522

优势:长通信距离、多种安全特性,适用于物流追踪、智能卡、门禁等领域。

这些程序示例提供了读取身份码的基本框架和库函数的使用方法。根据不同的芯片和库,具体的程序实现会有所差异。请根据所使用的芯片和开发环境,参考相关的数据手册、库文档和示例代码,进行必要的调试和修改。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43987

    浏览量

    620939
  • IC
    IC
    +关注

    关注

    35

    文章

    5545

    浏览量

    173231
收藏 人收藏

    评论

    相关推荐

    MAC地址码申请指南:散装串号与主体关联的大中小号段的区别

    MAC地址是网络设备(如计算机、手机、路由器等)在局域网中的唯一标识符,可以说MAC地址就是一台设备的身份证号码。全球范围内不管是什么地区,MAC地址都是由IEEE统一下发分配并管理,用于网络通信
    的头像 发表于 04-24 17:48 389次阅读
    MAC地址码申请指南:散装串号与主体关联的大中小号段的区别

    日产10万客户个人信息遭窃,包括身份证和驾驶执照等敏感信息

    据统计,此次被盗的信息包括超过1万条“身份证”信息,7500张驾驶执照,4000张医疗保险卡,1300个税务档案号码以及220本护照信息。
    的头像 发表于 03-13 14:51 330次阅读

    数据库查询

    请问一下,怎么做一个简易界面,Excel或者word中有个人信息,怎么做一个labview界面,输入身份证号直接显示出对应的所有信息
    发表于 03-08 15:03

    通过网段隔离器实现NAT转换与跨网段访问

    在我们的网络世界中,每个设备都有一个独一无二的IP地址,就像我们的身份证号码一样。然而,随着网络世界的飞速发展,网络结构越来越复杂,IPv4地址资源变得越来越紧张,IPv6技术正在逐步普及运用,这就
    的头像 发表于 02-18 17:28 194次阅读
    通过网段隔离器<b class='flag-5'>实现</b>NAT转换与跨网段访问

    运放的三种应用

    运放在电路中主要存在三种应用,放大器,滤波器,振荡器。再这三种应用电路中,运放的两大特点虚短虚断仍然成立吗? 在阻尼振荡器中,工作过程是否按照我描述的这样,在反相输入端加一个近似锯齿波的电流源,正半
    发表于 01-26 16:18

    分布式锁的三种实现方式

    分布式锁的三种实现方式  分布式锁是在分布式系统中用于实现对共享资源进行访问控制的一种机制。分布式锁的实现需要考虑高可用性、高性能和正确性等
    的头像 发表于 12-28 10:01 341次阅读

    51单片机中断学习笔记

    51单片机中断学习笔记
    发表于 12-05 12:13

    快充的三种实现方式是什么?快充对电池的损害程度大吗?

    、平板电脑、笔记本电脑等电子设备中。本文将探讨快充的三种实现方式以及快充对电池的损害程度问题。 快充技术主要是通过提升充电电压、电流或两者同时提升的
    的头像 发表于 10-22 15:08 715次阅读

    浅谈单片机的烧录方式

    单片机的烧录方式主要可以分为三种:在电路编程(In-Circuit Programming,简称ICP)、在应用编程(In-Application Programming,简称IAP)和在系统编程(In-System Progr
    发表于 10-16 17:02 1031次阅读

    请问如何用单片机极管出现三种不同的电平状态?

    如何用单片机极管出现三种不同的电平状态?
    发表于 10-10 06:56

    二维码扫描仪模块,快速读取和核验电子身份证上的CTID二维码

    行亮码,扫描电子身份证上的二维码来实现更高效、更安全的身份核验的过程。而为了快速读取和核验电子身份码,二维码扫描仪模块(RD4800)应运而生。深圳市远景达物联网技术有限公
    的头像 发表于 09-18 15:32 995次阅读
    二维码扫描仪模块,快速读取和核验电子<b class='flag-5'>身份证</b>上的CTID二维码

    MAC地址、MAC码、蓝牙串号、WIFI串号这些有什么区别又如何申请呢

    这些其实都是一回事,主要作用也就是机身号相当于身份证号码的作用。因同工业化的社会都是流水线作业大批量一样的产品出厂,总要有办法来区分,特别是对于现在无线产品越来越广泛的今天,如果想区分出来同样工厂
    的头像 发表于 06-21 10:02 667次阅读
    MAC地址、MAC码、蓝牙串号、WIFI串号这些有什么区别又如何申请呢

    电子身份证来了,CTID网证身份核验终端助力提升窗口服务效率

    当下,随着现代科技的飞速发展和信息技术的指数级膨胀,电子身份证的应用来势凶猛,已成为现代社会中的一种重要身份认证方式。作为一种数字化的身份认证方式
    的头像 发表于 06-16 17:47 717次阅读
    电子<b class='flag-5'>身份证</b>来了,CTID网证<b class='flag-5'>身份</b>核验终端助力提升窗口服务效率

    PN7150无法读取身份证和银行卡是怎么回事?

    使用PN7150读取身份证和银行卡,安卓版本为Android9 有些银行卡有刷卡声音,但不是正常的刷卡声音,比如刷卡失败的提示音。没有弹出 NFC 标签信息。 我在日志中发现了以下问题: 1.同一张卡有不同的SAK 2. 发送NDEF 标签应用程序选择命令后收到返回码 6A 82。
    发表于 05-06 07:10

    移植PN7150无法在Android平台读取身份证要怎么处理?

    移植PN7150无法在Android平台读取身份证(二代身份证明)。 我们测试读取一张TypeA卡是可以的。
    发表于 05-06 06:49