这个基于STM32和RFID技术的员工打卡门禁系统,是我在通信工程专业毕业设计期间完成的一个实际应用项目。它完美结合了嵌入式系统开发、射频识别技术和门禁控制逻辑,实现了企业员工管理的自动化升级。
传统的人工签到方式存在代签、漏签等问题,而市面上的商业门禁系统价格昂贵且功能冗余。我这个系统的核心价值在于:用不到300元的硬件成本,实现了商业系统80%以上的核心功能,特别适合中小企业和学校实验室使用。
系统工作流程很直观:员工持RFID卡靠近读卡器→STM32读取卡号并验证→验证通过后驱动电磁锁开门,同时记录考勤数据→数据通过串口发送至上位机存储。整个过程响应时间控制在200ms以内,达到了商用级系统的性能要求。
选择STM32F103C8T6作为主控芯片主要基于三点考虑:
实际使用中发现,当系统同时处理RFID读取、LCD刷新和串口通信时,CPU利用率峰值会达到65%。因此我在代码中优化了中断优先级,确保RFID读取始终具有最高响应权。
对比测试了三种常见方案:
最终选择RDM6300是因为:
重要提示:RDM6300的天线设计很关键。实测发现,将天线绕成直径8cm的5匝线圈,并用热熔胶固定,可以获得最稳定的读取性能。
电磁锁选用12V/500mA的常闭型锁具,驱动电路需要注意:
实测中发现,如果直接使用STM32的3.3V IO控制三极管,在低温环境下可能出现驱动不足。解决方法是在GPIO和三极管之间加入ULN2003达林顿阵列,确保可靠驱动。
系统软件采用前后台架构:
code复制初始化硬件(时钟、GPIO、USART等)
↓
初始化RFID模块、LCD显示屏
↓
进入主循环:
1. 检测RFID卡号(中断触发)
2. 查询本地数据库验证卡号
3. 验证通过则驱动门锁,记录考勤
4. 通过串口上传数据至上位机
为提高验证效率,我设计了分级验证策略:
实测表明,对于500人的员工数据库,平均验证时间仅1.2ms。关键代码如下:
c复制int verify_card(uint8_t* card_id) {
// 检查公司代码
if(card_id[0]!=0x52 || card_id[1]!=0x00)
return 0;
// 二分查找
int low = 0, high = employee_count - 1;
while(low <= high) {
int mid = (low + high) / 2;
int cmp = memcmp(card_id+2, employees[mid].card_id, 4);
if(cmp == 0) return 1;
if(cmp < 0) high = mid - 1;
else low = mid + 1;
}
return 0;
}
考勤记录存储在STM32内部的Flash中,采用循环存储方式:
为防止频繁擦写导致Flash损坏,我实现了写缓存机制:先在RAM中积累20条记录,再一次性写入Flash。实测表明这种方法可将Flash寿命延长5倍以上。
STM32与上位机采用自定义串口协议:
code复制帧头(0xAA) | 长度(1B) | 命令(1B) | 数据(NB) | 校验(1B)
波特率设为115200,每200ms主动上传一次缓存中的考勤记录。为避免数据丢失,我实现了简单的重传机制:如果上位机未回复ACK,STM32会保留数据直至下次通信成功。
上位机使用SQLite存储数据,主要表格包括:
sql复制CREATE TABLE employees (
id INTEGER PRIMARY KEY,
card_id BLOB UNIQUE,
name TEXT,
department TEXT
);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
card_id BLOB,
time DATETIME,
FOREIGN KEY(card_id) REFERENCES employees(card_id)
);
这种设计支持高效的查询统计,例如计算某部门当月考勤率只需一条SQL:
sql复制SELECT count(*) FROM records
WHERE card_id IN (SELECT card_id FROM employees WHERE department='研发部')
AND date(time) BETWEEN '2023-06-01' AND '2023-06-30'
现场测试时发现两个典型问题:
解决方案:
为适应电池供电场景,我做了以下优化:
经测试,系统待机电流从原来的45mA降至3.8mA,使用2000mAh锂电池可连续工作约21天。
在毕业设计论文中,需要重点阐述以下几个创新点:
论文实验部分应包含详实的测试数据,例如:
我在实际部署中发现,系统在-10℃至50℃环境下均能稳定工作,满足大多数室内场景需求。通过这个项目,不仅掌握了STM32开发的全流程,更深刻理解了如何将理论知识转化为实际产品。