1. STM32与RC522 RFID模块的SPI通信实战
在嵌入式开发领域,RFID技术因其非接触式识别的特性被广泛应用于门禁系统、物流追踪等场景。本文将详细解析如何通过SPI接口实现STM32与MFRC522 RFID模块的通信,并提供可直接用于生产的代码实现方案。
1.1 硬件选型与连接
MFRC522是基于NXP芯片的13.56MHz RFID读写模块,支持ISO/IEC 14443A标准的卡片(如MIFARE Classic)。其典型工作距离为2-5cm,采用3.3V供电,绝对不可接入5V电压。
硬件连接建议:
- VCC → 3.3V
- GND → GND
- RST → PA3 (可配置)
- SDA/NSS → PA4 (SPI片选)
- MOSI → PA7
- MISO → PA6
- SCK → PA5
关键提示:务必确保STM32开发板也工作在3.3V逻辑电平,否则可能损坏RC522模块。我曾因疏忽这一点烧毁过两个模块。
1.2 STM32CubeMX配置
在CubeMX中需进行以下关键配置:
-
时钟树配置:
- 外部晶振8MHz
- 通过PLL倍频至72MHz系统时钟
-
SPI1参数:
c复制Mode: Full-Duplex Master Prescaler: 64 (约1MHz速率) Data Size: 8 bits CPOL: Low CPHA: 1 Edge NSS: Software -
GPIO分配:
- PA4作为手动控制的片选信号
- PA3作为复位引脚
- 额外配置两个LED(PA8和PB15)用于状态指示
-
UART1配置:
- 波特率115200
- 8位数据位,无校验
- 用于调试信息输出
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 驱动库移植与核心代码实现
2.1 MFRC522驱动库移植
从开源社区获取的MFRC522_STM32库需要做以下适配:
- 创建设备结构体:
c复制typedef struct {
SPI_HandleTypeDef *hspi;
GPIO_TypeDef *csPort;
