NFC门禁控制系统 - 需求文档
一、硬件配置
1. 主控芯片
- 型号: STM32F103C8T6
- 封装: LQFP48
2. 外设清单
| 外设 | 型号 | 数量 |
|---|
| NFC读卡器 | MINI RFID-RC522 | 1个 |
| OLED显示屏 | 0.96寸 4针IIC接口 128x64 | 1个 |
| 有源蜂鸣器 | 3.3V有源 | 1个 |
| LED | 板载PC13 | 1个 |
| BL1551 | 双通道双向模拟开关 | 3个 |
二、引脚分配
STM32引脚功能表
| STM32引脚 | 功能 | 连接的设备 |
|---|
| PA0 | OLED_SCL | OLED屏幕时钟 |
| PA1 | OLED_SDA | OLED屏幕数据 |
| PA3 | RC522_RST | RC522复位 |
| PA4 | RC522_SDA | 数据接口) |
| PA5 | RC522_SCK | RC522时钟 |
| PA6 | RC522_MISO | SPI 接口主入从出 |
| PA7 | RC522_MOSI | SPI 接口主出从入 |
| PB0 | Register_Mode | 注册模式触发(低电平=注册模式) |
| PB8 | Remote_PAUSE | 遥控器暂停键 |
| PB9 | Remote_OPEN | 遥控器开门键 |
| PB10 | Remote_CLOSE | 遥控器关门键 |
| PB11 | Buzzer | 有源蜂鸣器控制 |
| PC13 | LED | 板载LED指示灯 |
RC522接线
| RC522引脚 | 连接 |
|---|
| 3.3V | 3.3V电源 |
| GND | GND |
| RST | PA3 |
| SDA | PA4 |
| SCK | PA5 |
| MOSI | PA7 |
| MISO | PA6 |
| IRQ | 悬空 |
OLED屏幕接线
| OLED引脚 | 连接 |
|---|
| GND | GND |
| VCC | 3.3V |
| SCL | PA0 |
| SDA | PA1 |
遥控器控制(通过BL1551)
STM32 PB8 ── BL1551 ── 遥控器暂停按钮 STM32 PB9 ── BL1551 ── 遥控器开门按钮 STM32 PB10 ── BL1551 ── 遥控器关门按钮
有源蜂鸣器接线
三、功能需求
1. 卡片注册功能
- 将PB0引脚接地(低电平)进入注册模式
- 在注册模式下刷NFC卡,该卡将被注册
- 最多支持5张注册卡
- 注册成功显示"Card ID: XX XX XX XX"和"注册成功"
- 注册成功LED闪烁3次作为提示
2. 卡片认证功能(正常使用模式)
- PB0保持高电平(默认上拉)为正常使用模式
- 刷已注册卡:显示"Card ID: XX XX XX XX"和"认证通过",蜂鸣器响两声
- 刷未注册卡:显示"Card ID: XX XX XX XX"和"认证失败",蜂鸣器响三声
3. 门禁控制功能
刷卡动作逻辑:
- 第1次刷已注册卡:按暂停键 → 按开门键(门开启)
- 第2次刷已注册卡:按暂停键 → 按关门键(门关闭)
- 循环往复
开门保护:
4. 蜂鸣器声音提示
| 场景 | 声音模式 |
|---|
| 注册卡刷卡成功 | 两声短响(嘀-嘀) |
| 未注册卡刷卡 | 三声长响(嘟-嘟-嘟) |
5. OLED显示界面
| 场景 | 显示内容 |
|---|
| 系统启动 | “=== 欢迎 ===” + “请刷卡” |
| 注册模式刷卡 | “Card ID: XX XX XX XX” + “注册成功” |
| 已注册卡刷卡 | “Card ID: XX XX XX XX” + “认证成功” |
| 未注册卡刷卡 | “Card ID: XX XX XX XX” + “认证失败L” |
| 门已暂停 | “Door Paused” |
| 3秒无操作 | 恢复"=== 欢迎 ===" + “请刷卡” |
四、技术要求
1. 通信方式
- RC522: 软件SPI模拟(不使用硬件SPI)
- OLED: 软件I2C模拟(不使用硬件I2C)
2. 编译工具链
- 编译器: arm-none-eabi-gcc
- 构建系统: CMake
- 烧录工具: OpenOCD + ST-Link
3. 驱动要求
- 禁用HAL库的硬件I2C、SPI驱动
- 全部使用GPIO模拟实现
五、代码文件结构
--- ## 六、关键函数说明 | 函数名 | 功能 | |-------|------| | `LED_Blink(times, delay)` | LED闪烁指定次数 | | `Buzzer_Beep(duration)` | 蜂鸣器响指定时长 | | `Buzzer_Success()` | 成功提示音(两声短响) | | `Buzzer_Fail()` | 失败提示音(三声长响) | | `CheckRegisteredCard(cardID)` | 检查卡是否已注册 | | `RegisterCard(cardID)` | 注册新卡 | | `ControlDoor(command)` | 控制门('O'=开门,'C'=关门,'P'=暂停) | | `DisplayCardID(cardID, isRegistered)` | 显示卡号和认证状态 | | `RC522_ReadCardID(cardID)` | 读取NFC卡ID | | `OLED_Init()` | OLED初始化 | | `OLED_ShowString()` | OLED显示字符串 | --- ## 七、使用流程 ### 1. 首次使用 - 注册卡片 1. 将PB0引脚接地(低电平) 2. 给STM32上电 3. 刷需要注册的NFC卡 4. 显示"Register OK"表示注册成功 5. 断开PB0接地,恢复正常使用 ### 2. 正常使用 1. 确保PB0处于高电平状态 2. 刷已注册卡控制门的开/关 3. 未注册卡会触发报警提示 # 实验分析