stm32和rc522门禁
时间: 2025-06-06 10:18:58 浏览: 15
### STM32与RC522门禁系统实现方案
STM32微控制器通过硬件SPI接口与RC522模块通信,能够实现非接触式RFID读写操作。以下是关于硬件连接、代码示例以及具体实现的详细说明。
---
#### 硬件连接教程
RC522模块与STM32的硬件连接主要依赖于SPI通信协议。以下是具体的引脚连接方式:
| RC522 引脚 | 功能描述 | 对应 STM32 引脚 |
|------------|----------------|-------------------|
| SDA | 数据输入/输出 | PA7 (MOSI) |
| SCK | 时钟信号 | PA5 (SCK) |
| MOSI | 主设备发送数据 | PA7 (MOSI) |
| MISO | 主设备接收数据 | PA6 (MISO) |
| GND | 接地 | GND |
| RST | 复位信号 | PB0 (GPIO) |
| IRQ | 中断信号 | PB1 (GPIO) |
| VCC | 电源 | 3.3V |
注意:确保RC522模块的工作电压为3.3V,避免因电压过高导致模块损坏[^1]。
---
#### 示例代码
以下是一个基于STM32 HAL库的完整代码示例,用于实现RC522模块的初始化和UID读取功能。
```c
#include "stm32f1xx_hal.h"
#define RC522_CS_PIN GPIO_PIN_4
#define RC522_CS_GPIO_PORT GPIOA
// SPI 发送单字节函数
uint8_t spi_transfer(uint8_t data) {
HAL_SPI_TransmitReceive(&hspi1, &data, &data, 1, 100);
return data;
}
// RC522 初始化函数
void rc522_init() {
// 拉低片选信号
HAL_GPIO_WritePin(RC522_CS_GPIO_PORT, RC522_CS_PIN, GPIO_PIN_RESET);
// 初始化 SPI
__HAL_SPI_ENABLE(&hspi1);
// 写入寄存器配置
uint8_t command = PICC_CMD_REQA; // 请求卡片
spi_transfer(command);
// 恢复片选信号
HAL_GPIO_WritePin(RC522_CS_GPIO_PORT, RC522_CS_PIN, GPIO_PIN_SET);
}
// UID 读取函数
void read_uid() {
uint8_t uid[4]; // 存储 UID
uint8_t size = 4;
// 拉低片选信号
HAL_GPIO_WritePin(RC522_CS_GPIO_PORT, RC522_CS_PIN, GPIO_PIN_RESET);
// 发送请求命令
spi_transfer(PICC_CMD_ANTICOLL); // 防冲突检测
spi_transfer(0x20); // 位数设置
// 接收 UID 数据
for (int i = 0; i < size; i++) {
uid[i] = spi_transfer(0x00);
}
// 打印 UID
for (int i = 0; i < size; i++) {
printf("UID Byte %d: 0x%02X\n", i, uid[i]);
}
// 恢复片选信号
HAL_GPIO_WritePin(RC522_CS_GPIO_PORT, RC522_CS_PIN, GPIO_PIN_SET);
}
int main(void) {
// 初始化 HAL 库
HAL_Init();
// 初始化时钟、GPIO 和 SPI
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
// 初始化 RC522 模块
rc522_init();
while (1) {
// 读取卡片 UID
read_uid();
HAL_Delay(1000); // 延时 1 秒
}
}
```
上述代码实现了RC522模块的基本初始化和UID读取功能。通过SPI接口与RC522通信,并将读取到的UID打印到串口调试工具中[^1]。
---
#### 安全性增强
为了提高门禁系统的安全性,可以利用RC522模块对MIFARE卡的支持,通过设置扇区密钥来限制访问权限。例如,可以通过验证第2扇区(01扇区)的第1区块内容是否为预设值(如`FF`),进一步确认卡片身份[^4]。
---
阅读全文
相关推荐

















