基于STM32的RC522门禁系统程序解读

最近我在做一个有关RFID-RC522的项目,因为博主第一次使用这个模块,所以对其中的一些指令并不熟悉,所以我查了很多相关的教程,发现给出的驱动程序有许多寄存器读写的操作,可读性不高,且给出的解释较少。为了让更多人对RC522模块的指令和操作有更进一步的理解,同时加深我自己对程序的理解,我阅读了RC522模块相关的数据手册,并将其与程序对应,在此想通过这篇文章尝试对程序进行解读,其中难免有理解片面或错误的地方,恳请大家指正。

RC522门禁模块采用MFRC522芯片进行读卡,对于MFRC522芯片,数据手册中提到它可以实现不同主机接口的功能:I2C,SPI和UART,但是市面上常见的还是以SPI作为通信协议的八针脚RF522模块(如下图)

对于SPI协议及其配置,本文不再赘述,网上有很多相关的很详细的文章。下面我将分开列出程序代码并结合数据手册进行解读。

首先大家要了解一下MFRC522芯片的寄存器地址、名称及其功能,话不多说,直接上图:

可以看到这款芯片的寄存器是非常多的,为了后续使用方便,我们先把它们写到头文件中

// Page 0: Command and Status
#define MFRC522_REG_RESERVED00          0x00
#define MFRC522_REG_COMMAND		        0x01
#define MFRC522_REG_COMM_IE_N	        0x02
#define MFRC522_REG_DIV1_EN		        0x03
#define MFRC522_REG_COMM_IRQ	        0x04
#define MFRC522_REG_DIV_IRQ			    0x05
#define MFRC522_REG_ERROR			    0x06
#define MFRC522_REG_STATUS1			    0x07
#define MFRC522_REG_STATUS2			    0x08
#define MFRC522_REG_FIFO_DATA		    0x09
#define MFRC522_REG_FIFO_LEVEL		    0x0A
#define MFRC522_REG_WATER_LEVEL		    0x0B
#define MFRC522_REG_CONTROL			    0x0C
#define MFRC522_REG_BIT_FRAMING		    0x0D
#define MFRC522_REG_COLL			    0x0E
#define MFRC522_REG_RESERVED01		    0x0F
// Page 1: Command
#define MFRC522_REG_RESERVED10		    0x10
#define MFRC522_REG_MODE			    0x11
#define MFRC522_REG_TX_MODE			    0x12
#define MFRC522_REG_RX_MODE			    0x13
#define MFRC522_REG_TX_CONTROL		    0x14
#define MFRC522_REG_TX_AUTO			    0x15
#define MFRC522_REG_TX_SELL				0x16
#define MFRC522_REG_RX_SELL				0x17
#define MFRC522_REG_RX_THRESHOLD		0x18
#define MFRC522_REG_DEMOD				0x19
#define MFRC522_REG_RESERVED11			0x1A
#define MFRC522_REG_RESERVED12			0x1B
#define MFRC522_REG_MIFARE				0x1C
#define MFRC522_REG_RESERVED13		    0x1D
#define MFRC522_REG_RESERVED14			0x1E
#define MFRC522_REG_SERIALSPEED			0x1F
// Page 2: CFG
#define MFRC522_REG_RESERVED20			0x20
#define MFRC522_REG_CRC_RESULT_M		0x21
#define MFRC522_REG_CRC_RESULT_L		0x22
#define MFRC522_REG_RESERVED21			0x23
#define MFRC522_REG_MOD_WIDTH			0x24
#define MFRC522_REG_RESERVED22			0x25
#define MFRC522_REG_RF_CFG				0x26
#define MFRC522_REG_GS_N				0x27
#define MFRC522_REG_CWGS_PREG			0x28
#define MFRC522_REG__MODGS_PREG			0x29
#define MFRC522_REG_T_MODE				0x2A
#define MFRC522_REG_T_PRESCALER			0x2B
#define MFRC522_REG_T_RELOAD_H			0x2C
#define MFRC522_REG_T_RELOAD_L			0x2D
#define MFRC522_REG_T_COUNTER_VALUE_H	0x2E
#define MFRC522_REG_T_COUNTER_VALUE_L	0x2F
// Page 3:TestRegister
#define MFRC522_REG_RESERVED30			0x30
#define MFRC522_REG_TEST_SEL1			0x31
#define MFRC5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值