网站首页 > 技术教程 正文
学习目标
使用M1卡控制开发板LED,实现LED的开关功能
实验器材
STM32开发板、RFID-RC522模块、M1卡
实验步骤
我购买的MF522模块有SPI通讯、IIC通讯、UASRT串口通信,我购买的模块采用SPI通讯模式与单片机进行通讯。首先配置单片机的SPI通讯,我们使用STM32CUBE配置图如下:
接线
单片机与RC522模块之间的接线可按照下图进行管脚连接,我用的单片机为STM32单片机的SPI1模块。其中RCC522模块中的SS为SPI片选、RST为模块的复位引脚,高电平有效。
单片机操作RC522模块主要有以下流程:初始化->寻卡->获取ID->选卡->密码验证->操作卡片这几个步骤(关于这些流程的具体含义大家可以点下面链接视频有详细描述:快速上手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(二)—制作开关卡。
猜你喜欢
- 2024-11-07 超值一篇分享,Docker:从入门到实战过程全记录
- 2024-11-07 首创引入蛋白动态信息的AI模型,高效预测药物-蛋白亲和力
- 2024-11-07 这个高中女生建立了一个道德黑客站,让人们进入数据安全
- 2024-11-07 「洞幺邦」智能停车场车位管理系统
- 2024-11-07 基于ARM的商用车信息系统的设计 基于arm的车辆中控娱乐系统报告
- 2024-11-07 CrowPi2树莓派4教育笔记本电脑的评测
- 2024-11-07 浅谈嵌入式开发朋友的身边事 嵌入式开发实例
- 2024-11-07 校园一卡通系统中RFID读写器的设计
- 2024-11-07 学生设计——小区门禁系统设计 小区门禁系统安装图教程
- 2024-11-07 电容式触控开关实验(二):触控式LED调光器
你 发表评论:
欢迎- 07-07单片机开发之ADC模数转换和DAC数模转换
- 07-07内建数模转换 Aero耳机众筹(内建模型)
- 07-07最熟悉才最陌生!这些视频接口你真知道?
- 07-07IMEC推出150 GSa/s 数模转换器,助力欧洲突破高速互联瓶颈
- 07-07USB端ESD防护电路设计,3种usb保护电路图详解
- 07-07美的变频空调外机电控盒电控电脑主板工作原理及检修办法
- 07-07您的数模转换器有多精确?(数模转换器计算公式)
- 07-07关于芯片,这里有你没看过的硬核科普
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)