一、项目全景与开发环境搭建

大家好,我是你们的嵌入式讲师。今天咱们正式开始《门禁系统嵌入式开发全流程实战》的第一课。

说实话,门禁系统这个项目,我做了不下十次。从最早的简单刷卡开门,到后来带指纹、人脸识别的复杂系统。但万变不离其宗,核心逻辑其实都一样。今天咱们就从零开始,把整个项目拆开揉碎了讲。

1.1 门禁系统功能需求分析

先聊聊需求。你想想看,一个门禁系统,最核心的功能是什么?

  • 身份验证:刷卡、输密码,确认你是不是合法用户
  • 门锁控制:验证通过后,电磁锁得能打开
  • 状态反馈:开锁成功还是失败,得让用户知道
  • 异常处理:比如连续输错密码,得报警或者锁定

我个人习惯,在动手写代码之前,先把功能列表列清楚。这样后面才不会乱。

核心功能清单:

  • RFID刷卡识别(支持M1卡)
  • 4x4键盘密码输入
  • 电磁锁控制(继电器驱动)
  • OLED显示状态信息
  • 蜂鸣器提示音
  • 管理员模式(添加/删除卡片)

1.2 硬件选型详解

硬件选型这块,我踩过不少坑。咱们直接说结论。

模块 型号 选型理由
主控MCU STM32F103C8T6 性价比高,资料多,适合入门
RFID模块 RC522 支持SPI通信,稳定可靠
电磁锁 12V单门磁力锁 断电开锁,安全考虑
键盘 4x4矩阵键盘 节省IO口,成本低
显示 0.96寸OLED I2C接口,显示清晰

嗯,这里要注意一点。电磁锁的驱动电流比较大,不能直接用STM32的IO口驱动。我建议加一个继电器模块做隔离。曾经有一次我偷懒,直接驱动,结果烧了一个IO口...从那以后,隔离电路我从来不敢省。

1.3 软件架构设计

软件架构这块,说白了就是怎么组织你的代码。我习惯用分层设计。

我的分层思路:

  • 硬件抽象层(HAL):封装GPIO、SPI、I2C等底层操作
  • 驱动层:RC522驱动、OLED驱动、键盘驱动
  • 业务逻辑层:刷卡验证、密码比对、开锁控制
  • 应用层:状态机管理、用户交互

为什么要分层?你想想看,如果哪天你想把RC522换成PN532,只需要改驱动层,业务逻辑完全不用动。这就是分层的好处。

1.4 Keil MDK与STM32CubeMX环境搭建

环境搭建这块,我直接说步骤。跟着做就行。

第一步:安装Keil MDK

去官网下载MDK-ARM,安装时记得勾选STM32F1系列的器件包。我记得有一次安装完发现找不到芯片,折腾了半天才发现是器件包没装。

第二步:安装STM32CubeMX

这个工具用来生成初始化代码。配置时钟、GPIO、外设,非常方便。

第三步:创建工程

打开CubeMX,选择STM32F103C8T6。配置如下:

// 时钟配置
HSE: 8MHz外部晶振
SYSCLK: 72MHz
APB1: 36MHz
APB2: 72MHz

// 外设配置
SPI1: 用于RC522
I2C1: 用于OLED
GPIO: 键盘矩阵、继电器、蜂鸣器

避坑指南:

我曾经在配置SPI时钟极性时搞反了,导致RC522死活读不到数据。后来用逻辑分析仪一看,才发现时钟相位不对。所以建议大家配置完后,先用示波器或者逻辑分析仪确认一下波形。

第四步:生成代码并导入Keil

在CubeMX中点击生成代码,然后打开Keil工程。编译一下,确保没有错误。

1.5 小结

好了,第一节课的内容就到这里。咱们把项目需求理清了,硬件选型确定了,软件架构搭好了,开发环境也配好了。下一节课,咱们就开始写代码,先从RC522的驱动开始。

记住一句话:好的开始是成功的一半。环境搭建这一步,千万别着急。慢慢来,把每一步都走稳了,后面写代码才会顺手。

有什么问题,欢迎在评论区留言。咱们下节课见。