首页 » 互联网 » 快速学会RC522读写射频M1卡(一)-点亮LED_模块_单片机

快速学会RC522读写射频M1卡(一)-点亮LED_模块_单片机

落叶飘零 2024-11-20 18:57:45 0

扫一扫用手机浏览

文章目录 [+]

利用M1卡掌握开拓板LED,实现LED的开关功能

实验器材

快速学会RC522读写射频M1卡(一)-点亮LED_模块_单片机 互联网

STM32开拓板、RFID-RC522模块、M1卡

实验步骤

我购买的MF522模块有SPI通讯、IIC通讯、UASRT串口通信,我购买的模块采取SPI通讯模式与单片机进行通讯。
首先配置单片机的SPI通讯,我们利用STM32CUBE配置图如下:

SPI通讯配置

接线

单片机与RC522模块之间的接线可按照下图进行管脚连接,我用的单片机为STM32单片机的SPI1模块。
个中RCC522模块中的SS为SPI片选、RST为模块的复位引脚,高电平有效。

管脚接线图

RC522的管脚定义图

单片机操作RC522模块紧张有以下流程:初始化->寻卡->获取ID->选卡->密码验证->操作卡片这几个步骤(关于这些流程的详细含义大家可以点下面链接视频有详细描述:快速上手RC522读卡模块(一))。
个中每一步都有对应的操作函数,详细见下图。

单片机操作RC522流程图

我们本次实验为利用M1卡点亮LED灯。
由于每一个M1卡的ID均为固定唯一的,我们可以读出卡的ID并对ID进行判别来实现对LED灯的掌握。
根据上述的流程图,我们可以只实行到“获取ID”这一步骤即可实现此功能。
各函数如下:

//模块初始化:void MFRC_Init(void){ RS522_NSS(1); RS522_RST(1);}//模块复位:void PCD_Reset(void){ /硬复位/ RS522_RST(1); HAL_Delay(2); RS522_RST(0); HAL_Delay(2); RS522_RST(1); HAL_Delay(2); /软复位/ MFRC_WriteReg(MFRC_CommandReg, MFRC_RESETPHASE); HAL_Delay(2); /复位后的初始化配置/ MFRC_WriteReg(MFRC_ModeReg, 0x3D); //CRC初始值0x6363 MFRC_WriteReg(MFRC_TReloadRegL, 30); //定时看重装值 MFRC_WriteReg(MFRC_TReloadRegH, 0); MFRC_WriteReg(MFRC_TModeReg, 0x8D); //定时器设置 MFRC_WriteReg(MFRC_TPrescalerReg, 0x3E); //定时器预分频值 MFRC_WriteReg(MFRC_TxAutoReg, 0x40); //100%ASK PCD_AntennaOff(); //关天线 HAL_Delay(2); PCD_AntennaOn(); //开天线}

寻卡函数:

/ 函数名称:PCD_Request 功能描述:寻卡 入口参数: -RequestMode:讯卡办法 PICC_REQIDL:寻天线区内未进入休眠状态 PICC_REQALL:寻天线区内全部卡 -pCardType:用于保存卡片类型 出口参数:-pCardType:卡片类型 0x4400:Mifare_UltraLight 0x0400:Mifare_One(S50) 0x0200:Mifare_One(S70) 0x0800:Mifare_Pro(X) 0x4403:Mifare_DESFire 返 回 值:-status:缺点代码(PCD_OK、PCD_NOTAGERR、PCD_ERR) 说 明:无/char PCD_Request(uint8_t RequestMode, uint8_t pCardType){ int status; uint16_t unLen; uint8_t CmdFrameBuf[MFRC_MAXRLEN]; MFRC_ClrBitMask(MFRC_Status2Reg, 0x08);//关内部温度传感器 MFRC_WriteReg(MFRC_BitFramingReg, 0x07); //存储模式,发送模式,是否启动发送等 MFRC_SetBitMask(MFRC_TxControlReg, 0x03);//配置调制旗子暗记13.56MHZ CmdFrameBuf[0] = RequestMode; status = MFRC_CmdFrame(MFRC_TRANSCEIVE, CmdFrameBuf, 1, CmdFrameBuf, &unLen); if((status == PCD_OK) && (unLen == 0x10)) { pCardType = CmdFrameBuf[0]; (pCardType + 1) = CmdFrameBuf[1]; } return status;}

获取ID函数:

/ 函数名称:PCD_Anticoll 功能描述:防冲突,获取卡号 入口参数:-pSnr:用于保存卡片序列号,4字节 出口参数:-pSnr:卡片序列号,4字节 返 回 值:-status:缺点代码(PCD_OK、PCD_NOTAGERR、PCD_ERR) 说 明:无/char PCD_Anticoll(uint8_t pSnr){ char status; uint8_t i, snr_check = 0; uint16_t unLen; uint8_t CmdFrameBuf[MFRC_MAXRLEN]; MFRC_ClrBitMask(MFRC_Status2Reg, 0x08); MFRC_WriteReg(MFRC_BitFramingReg, 0x00); MFRC_ClrBitMask(MFRC_CollReg, 0x80); CmdFrameBuf[0] = PICC_ANTICOLL1; CmdFrameBuf[1] = 0x20; status = MFRC_CmdFrame(MFRC_TRANSCEIVE, CmdFrameBuf, 2, CmdFrameBuf, &unLen); if(status == PCD_OK) { for(i = 0; i < 4; i++) { (pSnr + i) = CmdFrameBuf[i]; snr_check ^= CmdFrameBuf[i]; } if(snr_check != CmdFrameBuf[i]) { status = PCD_ERR; } } MFRC_SetBitMask(MFRC_CollReg, 0x80); return status;}

我们利用以上函数来读出卡ID后,单片机对卡ID进行判别,根据判别结果来实现对LED的掌握。
详细函数讲解及功能实现视比年夜家可以点击以下链接不雅观看:快速上手RC522(二)—制作开关卡。

相关文章

S7-200 Smart若何保持实时时钟_时钟_及时

PLC的系统韶光来自于其内部的实时时钟,而实时时钟则与其时钟晶振有关。我们知道,PLC的CPU模块内部实在是一块(或几块)电路板。...

互联网 2025-01-23 阅读0 评论0

国产家电芯片突围喜忧参半_芯片_家电

目前,运用于空调、冰箱、洗衣机、抽油烟机、洗碗机等家电的芯片和模块紧张有四类,分别是:微掌握器(MCU),功率器件(IPM、IGB...

互联网 2025-01-23 阅读0 评论0