玩转RFID(一) - MFRC522模块上手

本文分享了RC522 RFID模块的焊接过程及与Arduino Uno的连接调试方法,包括焊接步骤、引脚定义、库文件安装及示例程序烧录等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  近期入手了一套 RC522 的 RFID 模块,现在把我近期玩这个模块的经历分享给大家,大家可以参照这个过程,上手这个模块的玩法。
在这里插入图片描述
  刚到手的 RFID 模块与排针是分开的,需要自己焊上,焊什么的不用多说了吧,来这看贴文的应该都要会这个技能。选择焊直排针还是弧排针就看自己的需求了。

  RC522 RFID 的板子大概都是下面这个样子的。

在这里插入图片描述
  翻出吃灰已久的焊枪,一番操作后排针就焊上了,下面是找了一张已经焊好的板子的图。

在这里插入图片描述
  焊接的地方有一排引脚说明。我查了相关资料,下面整理出来各引脚的定义说明。

SDA SCK MOSI MISO IRQ GND RST 3.3V
选择设备 时钟信号 主出从入(数据) 主入从出(数据) 中断 接地
### STM32 使用 MFRC522 实现 RFID 射频识别 为了使STM32能够利用MFRC522实现RFID射频识别功能,需先理解两者之间的通信机制。MFRC522款专用于13.56MHz非接触式通信的高集成度读写器芯片,支持ISO14443A标准协议下的快速防冲突协议和多张卡片操作[^2]。 #### 配置硬件连接 在物理层面上,MFRC522模块通常通过SPI总线与微控制器相连。对于STM32而言,这意味着要设置好SPI接口参数并正确连线至对应的引脚上。具体来说: - MOSI (Master Out Slave In): 主控发送数据给从设备; - MISO (Master In Slave Out): 从设备返回响应给主控; - SCK (Serial Clock): 同步时钟信号由主控发出; - NSS (Slave Select): 片选信号控制何时选择该器件参与通讯; 此外还需要接通电源(VCC)和接地(GND),以及可能存在的IRQ中断请求线路。 #### 初始化软件环境 使用HAL库简化了底层驱动程序编写工作量,在初始化阶段主要涉及以下几个方面: - 设置SPI模式为全双工、主模式; - 定义波特率预分频因子以匹配目标频率; - 开启NSS管脚作为外部GPIO输出来管理片选状态; - 调用`HAL_SPI_Init()`函数完成最终配置过程。 ```c // SPI configuration structure definition static void MX_SPI1_Init(void) { hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; // Set as master mode hspi1.Init.Direction = SPI_DIRECTION_2LINES; // Full duplex communication hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // Data size is set to 8 bits hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // Idle clock level low hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // Capture on first edge of the clock cycle hspi1.Init.NSS = SPI_NSS_SOFT; // Software slave management enabled hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // Baud rate prescaler value hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; // MSB transmitted first hspi1.Init.TIMode = SPI_TIMODE_DISABLE; // TI mode disabled hspi1.Init.CRCPolynomial = 7; // CRC polynomial not used here HAL_SPI_Init(&hspi1); } ``` #### 编程逻辑流程 当切准备就绪之后,则可以通过调用特定API来进行实际的操作。下面给出段简单示例代码展示如何查询是否有新标签进入磁场范围之内,并尝试获取其UID序列号。 ```c #include "mfrc522.h" int main(void){ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_SPI1_Init(); /* Initialize MFRC522 module */ mfrc522_init(SPI1); while(1){ uint8_t result; uint8_t uid[5]; // Buffer for storing UID bytes. char strUid[12]; // String representation of UID. // Check if a new card has entered field and get its UID. result = mfrc522_request(PICC_REQIDL, &uid); if(result == MI_OK){ printf("Card detected.\n"); // Get the UID from the selected PICC. result = mfrc522_anticoll(uid); if(result==MI_OK){ sprintf(strUid,"%X%X%X%X",uid[0],uid[1],uid[2],uid[3]); printf("UID: %s\n",strUid); // Halt PICC. mfrc522_halt(); } } delay_ms(500); // Wait half second before next scan attempt. } } ``` 这段代码展示了基本的功能框架,包括初始化SPI接口、启动MFRC522模块、检测是否存在未被识别过的卡片、读取这些卡片唯的标识符(即UID),最后打印出来供进步处理或显示之用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值