快捷搜索:  汽车  科技

rc522引脚功能(快速学会RC522读写射频M1卡)

rc522引脚功能(快速学会RC522读写射频M1卡)单片机与RC522模块之间的接线可按照下图进行管脚连接,我用的单片机为STM32单片机的SPI1模块。其中RCC522模块中的SS为SPI片选、RST为模块的复位引脚,高电平有效。接线实验步骤我购买的MF522模块有SPI通讯、IIC通讯、UASRT串口通信,我购买的模块采用SPI通讯模式与单片机进行通讯。首先配置单片机的SPI通讯,我们使用STM32CUBE配置图如下:SPI通讯配置

学习目标

使用M1卡控制开发板LED,实现LED的开关功能

实验器材

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

实验步骤

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

rc522引脚功能(快速学会RC522读写射频M1卡)(1)

SPI通讯配置

接线

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

rc522引脚功能(快速学会RC522读写射频M1卡)(2)

管脚接线图

rc522引脚功能(快速学会RC522读写射频M1卡)(3)

RC522的管脚定义图

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

rc522引脚功能(快速学会RC522读写射频M1卡)(4)

单片机操作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(二)—制作开关卡。

猜您喜欢: