news 2026/4/15 7:16:50

打造STM32指纹考勤机:从原理到实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打造STM32指纹考勤机:从原理到实现

stm32指纹考勤机 (程序源码包括app程序+pcb电路图+原件清单) 实现的功能如下所示: (1) 用户可操控按键对用户进行录入、删除、清空数据以及查看历史记录等操作。 (2) 继电器可模拟指纹开锁。 (3) 用户可操控按键控制蜂鸣器发出蜂鸣声模拟报警。 (4) 搭载了实时时钟记录用户考勤的时间。 (5) 考勤管理APP连接考勤机后可在智能终端上显示记录数据。 (6) 考勤管理APP可以对继电器和蜂鸣器进行远程控制

最近折腾了一个基于STM32的指纹考勤机项目,今天来和大家分享分享其中的门道,顺便给大家唠唠实现代码。

硬件基础:PCB电路图与原件清单

首先,硬件是软件运行的基础。我们得有一份准确的PCB电路图,它就像是大楼的设计蓝图。对于这个指纹考勤机,电路图主要涉及到STM32最小系统、指纹识别模块接口、按键接口、继电器接口、蜂鸣器接口、实时时钟模块接口以及用于APP连接的通信接口(比如蓝牙或者WiFi模块接口)。

原件清单大概如下:

  • STM32开发板(根据实际需求选择合适型号,如STM32F103C8T6,价格亲民且性能不错)
  • 指纹识别模块(比如常见的R305,识别速度和准确率都还可以)
  • 按键若干(用于用户操作录入、删除等功能)
  • 继电器(控制模拟开锁动作)
  • 蜂鸣器(发出报警声)
  • 实时时钟模块(如DS1307,能精准记录时间)
  • 蓝牙或WiFi模块(实现APP与考勤机通信,蓝牙模块如HC - 05,成本低且易于使用)

软件功能实现

用户按键操作功能

用户通过按键进行各种操作,比如录入指纹、删除指纹、清空数据以及查看历史记录。下面是一个简单的按键检测代码示例(以STM32CubeMX生成的代码框架为基础):

// 假设按键连接到PA0引脚 #define KEY_GPIO_Port GPIOA #define KEY_Pin GPIO_PIN_0 void Key_Scan(void) { if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) { // 消抖处理,防止按键抖动误触发 HAL_Delay(50); if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) { // 在这里添加具体的操作函数调用,比如录入指纹 Fingerprint_Enroll(); while (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET); } } }

代码分析:首先我们定义了按键的GPIO端口和引脚,KeyScan函数用于扫描按键状态。当检测到按键按下(引脚电平为低),先进行消抖,再次确认按下后,调用相应的操作函数,这里以录入指纹函数FingerprintEnroll()为例。最后等待按键释放。

继电器模拟指纹开锁功能

继电器控制部分代码如下:

// 假设继电器连接到PB5引脚 #define RELAY_GPIO_Port GPIOB #define RELAY_Pin GPIO_PIN_5 void Relay_Control(uint8_t state) { if (state) { HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET); } }

代码分析:Relay_Control函数通过传入的state参数控制继电器状态。state为1时,设置继电器引脚为高电平,继电器吸合,模拟开锁;state为0时,设置引脚为低电平,继电器断开。

蜂鸣器模拟报警功能

// 假设蜂鸣器连接到PA5引脚 #define BEEP_GPIO_Port GPIOA #define BEEP_Pin GPIO_PIN_5 void Beep_Control(uint8_t state) { if (state) { HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET); } }

代码分析:和继电器控制类似,Beep_Control函数根据传入的state参数控制蜂鸣器引脚电平,实现蜂鸣器的开启和关闭,达到模拟报警效果。

实时时钟记录考勤时间

实时时钟部分代码使用DS1307为例:

#include "ds1307.h" RTC_TimeTypeDef Get_RTC_Time(void) { RTC_TimeTypeDef time; // 假设已经初始化好I2C总线 // 读取DS1307的时间寄存器数据并转换为RTC_TimeTypeDef格式 I2C_Read(DS1307_ADDR, 0x02, &time.Seconds, 1); I2C_Read(DS1307_ADDR, 0x01, &time.Minutes, 1); I2C_Read(DS1307_ADDR, 0x00, &time.Hours, 1); time.Seconds = BCD2DEC(time.Seconds); time.Minutes = BCD2DEC(time.Minutes); time.Hours = BCD2DEC(time.Hours); return time; }

代码分析:GetRTCTime函数通过I2C总线读取DS1307的时间寄存器数据,将BCD码格式的数据转换为十进制格式并填充到RTC_TimeTypeDef结构体中返回,供考勤记录使用。

APP与考勤机交互功能

如果使用蓝牙通信,以HC - 05为例,在STM32端代码主要涉及蓝牙数据的收发处理。

#include "usart.h" void Bluetooth_Receive_Process(void) { uint8_t data; if (HAL_UART_Receive(&huart1, &data, 1, 100) == HAL_OK) { // 根据接收到的数据进行相应处理,比如控制继电器或蜂鸣器 if (data == 'R') { Relay_Control(1); } else if (data == 'B') { Beep_Control(1); } } }

代码分析:BluetoothReceiveProcess函数通过UART接收蓝牙模块发来的数据,根据接收到的数据字符(这里假设R表示控制继电器,B表示控制蜂鸣器)调用相应的控制函数。

stm32指纹考勤机 (程序源码包括app程序+pcb电路图+原件清单) 实现的功能如下所示: (1) 用户可操控按键对用户进行录入、删除、清空数据以及查看历史记录等操作。 (2) 继电器可模拟指纹开锁。 (3) 用户可操控按键控制蜂鸣器发出蜂鸣声模拟报警。 (4) 搭载了实时时钟记录用户考勤的时间。 (5) 考勤管理APP连接考勤机后可在智能终端上显示记录数据。 (6) 考勤管理APP可以对继电器和蜂鸣器进行远程控制

而在APP端,就需要开发相应的界面来显示考勤记录数据以及实现对继电器和蜂鸣器的远程控制按钮等功能,这部分一般使用Android或iOS开发技术,比如Android开发中使用Java或Kotlin编写界面逻辑和蓝牙通信代码。

总之,打造这个STM32指纹考勤机涉及到硬件和软件多方面的知识和技术,希望这篇分享能给大家带来一些启发。后续有时间再和大家深入聊聊APP开发部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 6:34:36

【单仓库多旅行商问题SDMTSP】基于BSLO吸血水蛭优化器求解单仓库多旅行商问题,可以更改数据集和起点附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/11 2:42:13

强烈安利9个AI论文网站,MBA论文写作必备!

强烈安利9个AI论文网站,MBA论文写作必备! AI 工具如何助力 MBA 论文写作 MBA 学习过程中,论文写作是一项不可避免的挑战。无论是选题、资料收集还是内容撰写,都需要大量的时间和精力。而随着 AI 技术的发展,越来越多的…

作者头像 李华
网站建设 2026/4/15 5:26:58

大模型高薪岗位汇总:年薪40-220万,程序员必学必收藏

锐仕方达发布热招高薪岗位132个,最高年薪400万。大模型领域薪资诱人,9个精选岗位年薪从40万到220万不等,涵盖杭州、上海、北京等热门城市,涉及互联网、人工智能、航空航天等行业。这些高薪岗位包括大模型研发经理、算法工程师、技…

作者头像 李华
网站建设 2026/4/14 10:00:18

大模型时代职场指南:收藏这份全景职业图谱,找准你的发展赛道

本文将大模型领域岗位划分为基础设施与工程类、模型研发与算法类、数据类、产品与应用类四大类,详细列举了每类典型岗位及职责。文章指出岗位间存在交叉,未来可能出现新角色,并强调除专业技能外,沟通协作、产品思维和伦理意识日益…

作者头像 李华
网站建设 2026/4/12 1:25:19

突破传统训练局限!TRAPO框架实现大模型“边学边练“新范式

TRAPO框架解决了传统"先SFT后RL"两阶段训练的不一致性问题,通过实例级交错执行监督微调与强化学习实现"边学边练"协同范式。其创新"按需支架"机制和信任区域SFT(TrSFT)目标函数,通过梯度裁剪避免策略退化,使模…

作者头像 李华
网站建设 2026/4/14 20:12:26

大模型技术选型:从通用到垂直,企业AI落地的性价比之王(收藏指南)

文章分析了通用大模型与垂直大模型的适用场景,指出通用大模型加Agent在信息检索、办公自动化等领域已足够,而垂直大模型在医疗诊断、金融风控等高专业门槛领域不可替代。AI落地的最佳策略是用通用大模型做底座开发Agent工作流,仅在核心业务错…

作者头像 李华