基于STM32单片机开发光学指纹识别模块
论文-基于STM32的智能家居远程控制系统.docx

福州大学本科生毕业设计(论文)题目:基于STM32的智能家居远程控制系统姓名:学号:系别:电气工程系专业:电气工程及其自动化年级:2012级指导教师:2016 年 4月 28日独创性声明本毕业设计(论文)是我个人在导师指导下完成的。
文中引用他人研究成果的部分已在标注中说明;其他同志对本设计(论文)的启发和贡献均已在谢辞中体现;其它内容及成果为本人独立完成。
特此声明。
论文作者签名:日期:关于论文使用授权的说明本人完全了解福州大学有关保留、使用学位论文的规定,即:学院有权保留送交论文的印刷本、复印件和电子版本,允许论文被查阅和借阅;学院可以公布论文的全部或部分内容,可以采用影印、缩印、数字化或其他复制手段保存论文。
保密的论文在解密后应遵守此规定。
论文作者签名:指导教师签名:日期:基于STM32的智能家居远程控制系统摘要随着经济、社会以及相关技术的发展,特别是近年来在物联网建设的带动下,智能家居的概念越来越受到人们的关注,人们对家居智能化的需求也越来越大。
因此如果能设计一套成本低,控制简单,并且可以在最大程度上为用户提供高效、舒适、节能的居住和工作环境的智能家居系统是非常有前景的。
本课题在分析智能家居的研究现状、发展趋势、研究意义的基础上提出了基于STM32的智能家居远程控制系统的设计方案。
该系统以STM32F103ZET6为系统的主控芯片,配合许多的外设模块。
比如:GSM模块、指纹识别模块、TFT液晶屏、语音识别模块等器件。
软件程序方面,实现对串口通讯、GSM无线网络通信、TFT液晶屏等模块的程序编写。
在本设计中,用手机远程的向GSM模块发送短信,并识别短信的内容,根据其短信内容实现对实现家庭电器、窗帘、照明的本地或远程控制;利用语音识别模块控制家居环境中灯光部分的开、关以及亮度的调整;利用指纹识别来实现家居系统中门禁功能来保证用户安全。
本系统功能实用、操作简单、价格低廉、易于安装,可以为人们提供更便捷,更高效,更环保的生活环境。
基于单片机指纹识别系统设计

基于单片机指纹识别系统设计一、引言随着科技的不断发展,身份识别技术在各个领域的应用越来越广泛。
传统的身份识别方式,如密码、钥匙等,存在着容易丢失、遗忘、被窃取等安全隐患。
而指纹识别作为一种生物识别技术,具有唯一性、稳定性和便捷性等优点,逐渐成为了身份识别领域的主流技术之一。
单片机作为一种微型计算机系统,具有体积小、成本低、性能可靠等特点,被广泛应用于各种控制系统中。
本文将介绍一种基于单片机的指纹识别系统的设计方案,旨在为相关领域的研究和应用提供参考。
二、系统总体设计(一)系统功能需求本指纹识别系统主要实现以下功能:1、指纹采集:能够采集用户的指纹图像。
2、指纹处理:对采集到的指纹图像进行预处理、特征提取和匹配等操作。
3、存储管理:能够存储用户的指纹模板,并对其进行有效的管理。
4、显示输出:能够将识别结果通过显示屏输出给用户。
5、通信接口:具备与其他设备进行通信的接口,如USB、蓝牙等。
(二)系统总体结构系统主要由指纹采集模块、单片机控制模块、指纹处理模块、存储模块、显示模块和通信模块等组成。
指纹采集模块负责采集用户的指纹图像,并将其传输给单片机控制模块。
单片机控制模块对采集到的指纹图像进行控制和处理,将处理结果传输给指纹处理模块进行进一步的分析和处理。
指纹处理模块完成指纹的特征提取和匹配等操作,并将结果返回给单片机控制模块。
存储模块用于存储用户的指纹模板和相关数据。
显示模块用于显示识别结果和系统状态等信息。
通信模块用于实现系统与其他设备之间的数据传输和通信。
三、硬件设计(一)指纹采集模块指纹采集模块是整个系统的关键部分,其性能直接影响到系统的识别准确率和速度。
目前,常用的指纹采集技术主要有光学式、电容式和超声波式等。
本系统采用电容式指纹采集模块,其具有体积小、分辨率高、采集速度快等优点。
(二)单片机控制模块单片机控制模块是整个系统的核心部分,负责对系统的各个模块进行控制和协调。
本系统采用 STM32 系列单片机,其具有高性能、低功耗、丰富的外设接口等特点,能够满足系统的控制需求。
基于STM32 的门禁系统设计

报警
电压过高或过低、指纹 不匹配、密码不匹配、 触发童锁、胁迫开锁
识别后处理 匹配开门、送显示 指纹 ID、不匹配
报警 图 2 门禁系统的软件架构
第2期
曹 兰:基于 STM32 的门禁系统设计
95
2.1 主程序设计 主 程 序 主 要 包 括 上 电 初 始 化 、指 纹 设 置 、密 码 设 置 、指 纹 识 别 模 块 、继 电 器 驱 动 模 块 、密 码 处 理 模
表 3 录入指纹时的应答包指令格式
字节数 名称 内容
2 bytes 包头 0XEF01
4 bytes 芯片地址
XXXX
1 byte 包标识
02
2 bytes 包长度
03H
N bytes 数据 xxH
2 bytes 校验和
sum
注:确认码=00H 表示录入成功;确认码=01H 表示包有错;确认码=02H 表示传感器上无手指;确认码=03H 表示录入不成功 .
第 23 卷 第 2 期 2021 年 6 月
漳州职业技术学院学报 Journal of Zhangzhou Institute of Technology
Vol. 23, No.2 Jun. 2021
文章编号 :1673-1417(2021)02-0092-06
doi:10.13908/ki.issn1673-1417.2021.02.0017
96
漳州职业技术学院学报
2021 年
过程中 ,遇到问题要参考它的数据手册 ,比如要提高指纹的反应速度 ,指纹生成特征、匹配指纹时 ,可 以调用它内部的函数。
硬件上电初始化设置 页地址、列地址、行地址
设置片选、读写 控制引脚
基于STM32的智能门禁系统的设计

摘要摘要随着科学技术的不断提高,人们的生活水平不断提升,智能建筑将会在未来的城市建设中发挥重要的作用。
门禁系统是智能建筑领域非常重要的组成部分,不仅能够控制人员进出权限,还能够对这些人员的出入情况进行实时监控与记录,是智能建筑必不可少的安全防范设施。
射频识别门禁系统存在认证介质容易丢失、损坏, 指纹识别门禁系统容易受到环境的影响。
该设计针对目前的门禁系统研究的现状和发展的状况做了简要分析,结合对RFID 技术和指纹识别技术的研究,提出了一种基于STM32 的智能门禁系统设计方案,采用指纹识别技术和射频识别技术两种识别方式进行身份验证,完成门禁系统的多重验证方式。
避免了单一门禁系统存在的安全隐患,提高了系统的稳定性和安全性。
具体设计方案如下:硬件方面采用STM32 作为控制器,结合电源、射频识别、指纹识别、继电器等模块构建门禁系统终端的总体硬件架构。
软件方面结合硬件架构,采用模块化设计思路,设计开发主程序设计模块,指纹识别门禁模块,射频识别门禁模块。
上位机采用C#语言进行设计开发,实现门禁管理系统的设计。
在面对“互联网+”、物联网、移动智能化的挑战之下,门禁技术不断的创新,门禁系统进入了前所未有的转型期。
单一验证方式的门禁系统将被取代,智能门禁系统将成为门禁行业未来发展的趋势。
图44 幅;表13 个;参41 篇。
关键词:门禁系统;指纹识别;RFID;STM32分类号:TP399AbstractWith the continuous improvement of science and technology, and the people's living standard, intelligent building will play an important role In the future of urban construction. Door-control system is a essential key component of the field of intelligent building. It can not only control the access authority of personnel, but also monitor and record the access of these personnel in real time, which is an indispensable security and prevention facility of intelligent building. The identification medium of Radio frequency identification access control system is easily lost and damaged, and the fingerprint identification access control system is easily affected by the environment. This design makes a brief analysis of the current research status and development of the access control system and proposes a design scheme of intelligent access control system based on STM32 by combining with the RFID technology and fingerprint identification technology research. This design scheme adopts fingerprint identification technology and radio frequency identification technology to verify the identity, and completes the multiple verification of the access control system, which can avoid the hidden danger of single access control system and improve the stability and security of the system. The specific design scheme is as follows:In terms of hardware, it adopts STM32 as the controller to build the overall hardware architecture of access control system terminal by combining power supply, radio frequency identification, fingerprint identification, relay and other modules.In terms of software, it adopts modular design ideas to design and develop the main program design module, fingerprint identification access control module and RFID access control module. The upper computer adopts C# language to realize the design of access control management system.In the face of the challenge of ‘Internet plus’, internet of things and mobile intelligence, the continuous innovation of access control technology makes access control system enter an unprecedented transition period. The single verification method of access control system is gradually be replaced, and intelligent access control system will become the future development trend of the access control industry.Figure 44; Table 13; Reference 41Keywords: Access Control System,Fingerprint Recognition,RFID,STM32Chinese books catalog: TP399目次目次引言 (1)第 1 章绪论 (2)•门禁系统的概述 (2)•门禁系统的种类 (3)•门禁系统的研究现状及发展趋势 (4)•本课题研究的背景和意义 (4)•本课题研究的主要内容和结构 (6)第2 章射频识别系统原理 (8)•RFID 技术概述 (8)•RFID 系统的硬件组成 (9)•RFID 系统的软件组成 (11)•RFID 系统工作原理 (12)•电感耦合 (13)•电磁反向散射耦合 (13)•RFID 的频率标准 (14)•RFID 的应用领域 (15)•RFID 存在的问题 (16)•本章小结 (17)第3 章指纹识别技术原理 (18)•指纹识别技术概述 (18)•指纹识别原理 (19)•指纹图像的采集 (20)•指纹图像的预处理 (21)•指纹图像的特征提取 (24)•指纹图像的特征匹配 (26)•本章小结 (29)第4 章门禁系统的硬件设计 (30)•系统硬件设计方案 (30)•STM32 微控制器 (31)•MCU 主控芯片 (31)•串行外设接口(SPI) (33)•指纹识别模块设计 (36)•指纹传感器 (36)•指纹传感器模块接口 (37)•常用指令集 (38)•射频识别模块设计 (38)•MF RC522 简介 (39)•MF RC522 芯片特性 (40)•MF RC522 接口设计 (40)•天线设计 (42)4.4.5 S50 卡 (43)•系统电源电路 (44)•继电器模块 (45)•蜂鸣器提示电路 (46)•液晶显示电路 (46)•本章小结 (47)第5 章PC 机应用软件设计 (48)•Visual Studio 2010 开发环境 (48)•系统软件功能设计 (49)•系统管理软件设计 (50)•系统登录 (50)•用户信息管理 (51)•操作日志记录 (52)•用户信息查询 (52)•门锁控制界面 (52)•数据库设计 (53)•数据结构分析 (53)目次•数据表的设计 (55)•本章小结 (56)第6 章门禁系统软件设计 (57)6.1开发环境 (57)6.2主程序模块设计 (58)6.3射频模块程序设计 (59)6.4指纹模块程序设计 (63)6.5阅读器与射频卡之间的通信协议 (65)6.6本章小结 (66)结论 (67)参考文献 (68)附录A 门禁系统原理图 (71)致谢 (73)导师简介 (74)作者简介 (75)学位论文数据集 (76)引言引言生物识别技术是近几年发展起来的安全、便捷的身份认证技术,受到社会各界的高度重视。
基于STM32的智能人脸识别门禁系统

基于STM32的智能人脸识别门禁系统发布时间:2021-11-10T07:55:16.824Z 来源:《科技新时代》2021年9期作者:任雪、程智、陈茹曦、钱赛、曾子昂、范晓龙、樊红莉[导读] 同时也带来卡片或密码丢失、遗忘,复制以及被盗用的隐患和成本高的问题。
湖北汽车工业学院摘要:人脸识别门禁系统基于先进的人脸识别技术,结合成熟的ID卡和指纹识别技术,创新推出的一款安全实用的生物识别门禁控制系统。
该系统采用分体式设计,人脸、指纹和ID卡信息的采集和生物信息识别及门禁控制内外分离,实用性高、安全可靠。
为了提高智能门禁的安全性和控制设计成本,本文提出了基于STM32的人脸识别门禁系统的设计方案。
本系统主要以STM32系列单片机作为微控制器,通过OLED显示屏显示信息,按键输入控制,人体红外检测判别人体存在,外设人脸识别模块进行人脸图像采集、识别,向控制器STM32传输识别信息,进而控制门禁的开关。
整个系统不需联网独立运行,减少安全隐患。
另外配有按键模块进行密码输入验证,指纹模块指纹验证,声音识别合成模块辅助验证。
关键词:STM32;人脸识别;智能门禁一.引言随着社会经济的高速发展,人们开始追求舒适、安全的生活环境。
智能建筑随之迅猛发展,门禁系统作为智能建筑中的重要单元越来越得到重视。
目前国内的门禁系统以卡类设备、指纹设备或密码设置为主。
这些识别方式都要求人员近距离操作,当使用者双手被占用时则显得极不方便,同时也带来卡片或密码丢失、遗忘,复制以及被盗用的隐患和成本高的问题。
近年来,随着生物识别技术的不断发展与成熟,其具有的便携性、非易失性、不会被遗忘、难盗用等优势也逐步应用到门禁系统中。
常见的生物识别技术有:指纹、虹膜、语音、人脸等多种识别方式[1]。
虽然人脸识别容易受到光照强度、采集角度等诸多因素的影响,但它具有非接触式、可在人們毫无察觉的情况下进行图像采集和不易被仿造、识别率较高的优势,具有广泛的应用价值和市场前景。
基于STM32单片机的智能锁

0 引言与传统的机械门锁相比,智能锁的优势显而易见[2]。
智能锁凭借生物识别技术独特的安全性和便捷性[1],摒弃了传统钥匙容易丢失,操作不便的特性,越来越受人们的喜爱,已经成为现代社会的主流,是社会发展的必然趋势。
同时目前共享经济繁荣,在世界各地短期网上租房住宿是受欢迎的,这使很多人有多余房间或房屋出租,但如果他们为短期租户提供传统的钥匙,有可能面临钥匙被复制的风险[3]。
而使用智能锁可以有效地解决这一问题。
房东可以为租客设置一个短期有效的指纹或者数字密码,并在租期结束时取消密码的有效性,所以智能锁将是短期租房者的最佳选择[4]。
此外,由于智能锁发生异常或被破坏,还可以进行报警提示周围的人,从而降低被盗窃的风险。
在本文中使用了指纹识别传感器,RFID 射频技术和嵌入式技术来实现具有报警功能的智能锁系统[5]。
该系统通过指纹识别模块和RFID 射频读取器识别用户信息,通过串行液晶屏幕执行人机交互,并通过继电器打开和关闭控制电控锁,如果多次识别错误,就会被视为非法侵入警告。
系统主要功能模块的划分如下: (1)主控芯片:接收并解析模块发送来的数据,并对各模块进行控制。
(2)指纹识别模块:将采集到的指纹图像进行解析,并通过串口通信的方式,将结果发送至STM32主控芯片。
如果身份识别成功时,则打开电控锁,如果身份多次识别失败时,就会启动蜂鸣器报警模式。
(3)电源模块:将稳定的电源提供给需要的模块。
(4)串口液晶屏:优秀人机交互控制界面,用户可以控制系统的运行和显示相关信息。
(5)门禁开关:系统通过主控芯片发送指令,对继电器模块进行控制,从而控制门锁的开关。
1 智能锁系统总体结构本文研究的智能锁系统根据市场实际情况,具有智能化、低成本、和使用便捷等优势,该系统主要实现的功能包括以下几点:(1)指纹识别功能:当指纹模块采集到指纹图像时。
对其进行特征处理,并与模块中的指纹库数据进行匹配,最后将结果发送给STM32单片机,单片机再作出判断,发送相应的指令。
基于STM32的智能门禁系统的设计

基于STM32的智能门禁系统的设计作者:杨晶晶来源:《数码设计》2018年第08期摘要:本文结合指纹识别技术和射频识别技术的原理和特点,介绍了一种以STM32为控制中心,采用指纹识别模块和射频识别模块来进行身份验证,从而实现对门禁系统的控制的系统。
关键词:STM32;指纹识别;射频识别随着智能化时代的到来,以及物联网概念的兴起,作为集多种先进技术于一体的智能建筑,向新时代的人们提供着高质量、高安全、舒适性、方便的综合陛家居服务,同时体现着高效、节能、绿色的生活理念,作为安全防范不可或缺的设施,门禁系统在智能建筑领域有着重要的作用。
当前,常见的门禁系统有密码门禁系统、非接触式IC卡门禁系统、生物识别门禁系统(如指纹、人脸、虹膜、掌纹等)、乱序键盘门禁系统等。
随着科技的不断进步,人们对门禁系统的要求越来越高,门禁系统不仅要安全可靠,而且追求方便实用。
因此,一种高效的安全的门禁系统已经成为社会迫切的需求。
生物识别技术是一种根据人体固有的生理特征和行为特征来验证身份的技术,作为目前最为方便与安全的、有效的身份认证技术,越来越受到人们的青睐,指纹识别技术作为生物识别技术中应用最早的,最为实用可靠的,又不对人体造成侵犯的较为成熟的一种,一直都是人们研究的重点。
1射频识别技术射频识别技术是一种非接触式的自动识别技术,它是利用射频信号的空间耦合(电感或电磁耦合)或反射的传输特性,实现对目标对象的识别和相关数据信息的获取。
1.1射频识别系统的组成。
一个完整的射频识别系统主要由阅读器、电子标签、RFID中间件和应用系统四个部分组成。
阅读器:也称为读写器或读出装置,用于实现对电子标签数据的读写功能,主要由天线、射频接口和逻辑控制单元三部分组成。
电子标签:由耦合元件及芯片组成,是射频识别系统中信息的载体,依据应用场合的不同表现为不同的形态。
RFID中间件:是一种独立的系统软件或服务程序,扮演着电子标签和应用程序之间的中介角色。
基于stm32的as608指纹模块实验报告

基于stm32的as608指纹模块实验报告基于STM32的AS608指纹模块实验报告引言本实验报告旨在介绍基于STM32的AS608指纹模块的应用和实验过程。
实验准备在开始实验之前,需要准备以下材料和环境: - STM32开发板 - AS608指纹模块 - USB数据线 - 电脑 - Keil开发环境 - ST-Link下载器实验步骤步骤一:搭建硬件环境1.将STM32开发板与AS608指纹模块通过USB数据线连接。
2.使用ST-Link下载器将Keil开发环境中编译好的程序烧录到STM32开发板上。
步骤二:编写程序1.在Keil开发环境中创建新的工程,并选择STM32系列的芯片。
2.在工程中添加AS608指纹模块的相关库文件。
3.编写程序实现以下功能:–初始化指纹模块。
–采集指纹图像。
–提取指纹特征。
–比对指纹特征。
–存储和删除指纹。
–控制指纹模块的其他功能。
步骤三:调试程序1.使用Keil开发环境编译程序,并生成可执行文件。
2.将可执行文件通过ST-Link下载器烧录到STM32开发板上。
3.在电脑上打开串口调试工具,连接到STM32开发板。
4.手动触发指纹模块功能,通过串口调试工具查看输出结果。
步骤四:实验结果根据实验步骤三的调试过程,获取以下实验结果: - 初始化指纹模块成功。
- 采集指纹图像成功。
- 指纹特征提取成功。
- 指纹比对结果准确。
- 指纹存储和删除操作正常。
- 其他控制功能正常。
实验总结通过本次实验,我们成功实现了基于STM32的AS608指纹模块的各项功能。
实验过程中需要注意硬件的连接和工程的配置,同时还需要熟悉AS608指纹模块的相关指令和功能。
该实验为后续指纹识别应用的开发和优化提供了基础。
参考资料暂无抱歉,由于文本限制,无法继续添加内容。
如果您有其他具体需求,可以告诉我,我将尽力提供帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于STM32单片机开发光学指纹识别模块(FPM10A)全教程收藏人:共同成长8882014-05-08 | 阅:25 转:0 | 来源| 分享基于STM32单片机开发光学指纹识别模块(FPM10A)全教程• 1.平台首先我使用的是奋斗STM32开发板 MINI板光学指纹识别模块(FPM10A)2.购买指纹模块,可以获得三份资料1.简要使用说明2.使用指纹模块的功能函数3.FPM10A用户手册.3.硬件搭建根据使用说明:FPM 10A使用标准的串口与外界通信,默认的波特率为57600,可以与任何单片机,ARM,DSP等带串口的设备进行连接,请注意电平转换,连接电脑需要进行电平转换,比如MAX232电路。
FPM10A光学指纹模块共有5个管脚1 为VCC 电源的正极接 3.6V – 5.5V的电压均可。
2 为GND 电源的负极接地。
3 为TXD 串口的发送。
4 为RXD 串口的接收。
5 为NC 悬空不需要使用。
奋斗板上已经有5V的管脚,可以直接供给指纹模块,这里需要注意的是,指纹模块主要通过串口进行控制,模块和STM32单片机连接的时候,需要进行电平转换,这样只要把这个转接板插入STM32,接上5V的电,就可以工作了,将模块的发送端接转接板的接收端,接收端接转接板的发送端。
这样,我们的硬件平台就搭建好了!4.模块的测试工作模块成功上电后,指纹采集窗口会闪一下,表示自检正常,如果不闪,请仔细检查电源,是否接反,接错等。
指纹模块使用120MHZ的DSP全速工作,工作时芯片有一些热,经过严格的测试,这是没有问题的可以放心使用,在不使用的时候可以关闭电源,以降低功耗。
5.现在我们要进入编程环节了指纹模块主要是通过串口进行控制,所以这里我们需要用到单片机的串口模块。
我们需要用到两个关键函数1.使用串口发送一个字节的数据2.使用串口接收一个字节的数据这里我使用的STM32单片,所以这两个程序如下:view sourceprint?01.// 从 USART1 发送一个字节02.void USART1_SendByte(unsigned char temp)03.{04. USART_SendData(USART1, temp);05. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);06.}07.08.// 从 USART1 读取一个字节09.unsigned char USART1_ReceivByte()10.{11. unsigned char recev;12. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);13. recev = USART_ReceiveData(USART1);14. return recev;15.}6.查看FPM10A用户手册我们来实现比对一个指纹(我们这里假设指纹模块中已经存在指纹模板)首先我们需要让指纹模块检测是否有指纹输入(也就是是否有手指放在指纹模块上检测)我们来看手册上给的操作说明:我们需要发送给定的数据包给模块,发送的数据已经给我们了,现在我们参看给我们的C例程view sourceprint?01.//应答包数组02.unsigned char dat[18];03.04.//获得指纹图像05.06.unsigned char FP_Get_Img[6]={0x01,0x00,0x03,0x01,0x0,0x05};07.08.//协议包头09.10.unsigned char FP_Pack_Head[6] ={0xEF,0x01,0xFF,0xFF,0xFF,0xFF};11.12.//FINGERPRINT_获得指纹图像命令13.void FINGERPRINT_Cmd_Get_Img(void)14.{15. unsigned char i;16.17. for(i=0;i<6;i++) //发送包头18. USART1_SendByte(FP_Pack_Head[i]);19.20. for(i=0;i<6;i++) //发送命令 0x1d21. USART1_SendByte(FP_Get_Img[i]);22.23. for(i=0;i<12;i++)//读回应答信息24. dat[i]=USART1_ReceivByte();25.}说明:这个函数就是检测是否有指纹输入的信息,根据用户手册,当确认码返回值为0时,表示成功录入,所以,我们可以有下面的函数:view sourceprint?01.//检测指纹模块录入指纹情况,返回00表示录入成功;02无手指;03录入失败02.unsigned char test_fig()03.{04. unsigned char fig_dat;05. FINGERPRINT_Cmd_Get_Img();06. Delay_ms1(20);07. fig_dat=dat[9];08. return(fig_dat);09.}10.11.因此,我们在主函数中可以这样调用:12.void main13.{14. if(test_fig()==0)15. {16. //do something17. }18.}7.如何录入一个新的指纹信息呢?步骤如下1.获得指纹图像2.检测是否成功的按了指纹3.将图像转换成特征码存放在Buffer1中4.再次获得指纹图像5.将图像转换成特征码存放在Buffer2中6.转换成特征码7.存储到指定地址上同样的,根据用户手册,我们可以得到以下这样的模块:当调用的时候,你只要给这个函数附上两个值就可以了,例如:unsigned char FP_add_new_user(00,01);如果你下次再次写入这个地址,以前存储的指纹模板信息将被覆盖view sourceprint?01.//添加一个新的指纹02.unsigned char FP_add_new_user(unsigned char ucH_user,un signed char ucL_user)03.{04. do05. {06. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像07. } while ( dat[9]!=0x0 ); //检测是否成功的按了指纹08.09. FINGERPRINT_Cmd_Img_To_Buffer1(); //将图像转换成特征码存放在Buffer1中10.11. do12. {13. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像14. } while( dat[9]!=0x0 );15.16. FINGERPRINT_Cmd_Img_To_Buffer2(); //将图像转换成特征码存放在Buffer2中18. FINGERPRINT_Cmd_Reg_Model(); //转换成特征码19.20. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);21.22. return 0;23.}24.25.//存储模版到特定地址26.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char , unsigned char ucL_Char)27.{28. unsigned long temp = 0;29. unsigned char i;30.31. FP_Save_Finger[5] = ucH_Char;32. FP_Save_Finger[6] = ucL_Char;33.34. for(i=0;i<7;i++) //计算校验和35. temp = temp + FP_Save_Finger[i];36.37. FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据38. FP_Save_Finger[8]= temp & 0x0000FF;39.40.41. for(i=0;i<6;i++)42. USART1_SendByte(FP_Pack_Head[i]); //发送包头43.44. for(i=0;i<9;i++)45. USART1_SendByte(FP_Save_Finger[i]) ;//发送命令将图像转换成特征码存放CHAR_buffer146.47. for(i=0;i<12;i++)48. dat[i]=USART1_ReceivByte();49.}8.如何删除一个模板?view sourceprint?01.//删除所有指纹模版02.void FINGERPRINT_Cmd_Delete_All_Model(void)03.{04. unsigned char i;06. for(i=0;i<6;i++) //发送包头07. USART1_SendByte(FP_Pack_Head[i]);08.09. for(i=0;i<6;i++) //发送命令 0x1d10. USART1_SendByte(FP_Delet_All_Model[i]);11.12. for(i=0;i<12;i++)//读回应答信息13. dat[i]=USART1_ReceivByte();14.}9.如何获取已经存取的指纹模板信息?这个模块一共可以存储0~999枚指纹信息view sourceprint?01.//搜索全部用户999枚02.void FINGERPRINT_Cmd_Search_Finger(void)03.{04. unsigned char i;05. //发送命令搜索指纹库06. for(i=0;i<6;i++)07. {08. USART1_SendByte(FP_Pack_Head[i]);09. }10.11. for(i=0;i<11;i++)12. {13. USART1_SendByte(FP_Search[i]);14. }15.16. for(i=0;i<16;i++)17. {18. dat[i]=USART1_ReceivByte();19. }20.}根据用户手册,我们可以从应答包中得出模块中已经存在指纹数量的大小这样,我们就轻松把指纹模块搞定!下面我附上基于STM32单片机光学指纹识别模块(FPM10A)打包好的函数库第一个是FPM10A.cview sourceprint?001.#include "stm32f10x.h"002.#include "stm32f10x_usart.h"003.#include "misc.h"004.unsigned char dat[18];005.006.//FINGERPRINT通信协议定义007.unsigned char FP_Pack_Head[6] ={0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头008.unsigned char FP_Get_Img[6] ={0x01,0x00,0x03,0x01,0x0,0x05}; //获得指纹图像009.unsigned char FP_Templete_Num[6]={0x01,0x00,0x03,0x1D,0x00,0x21 }; //获得模版总数010.unsigned char FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0 ,0x0,0x03,0xA1,0x0,0xB2}; //搜索指纹搜索范围0 - 929011.unsigned char FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01 ,0x0,0x0,0x0,0x13,0x0,0x21};//搜索0-9号指纹012.unsigned char FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0 x01,0x0,0x08}; //将图像放入到BUFFER1013.unsigned char FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0 x02,0x0,0x09}; //将图像放入到BUFFER2014.unsigned char FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x 09}; //将BUFFER1跟BUFFER2合成特征模版015.unsigned char FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d, 0x00,0x11}; //删除指纹模块里所有的模版016.unsigned char FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x0 1,0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置017.unsigned char FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0 x0,0x0,0x0,0x1,0x0,0x0}; //删除指定的模版018.019.020.//从 USART1 发送一个字节021.void USART1_SendByte(unsigned char temp)022.{023. USART_SendData(USART1, temp);024. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);025.}026.027.//从 USART1 读取一个字节028.unsigned char USART1_ReceivByte()029.{030. unsigned char recev;031. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);032. recev = USART_ReceiveData(USART1);033. return recev;034.}035.//FINGERPRINT命令字036.//FINGERPRINT_获得指纹图像命令037.void FINGERPRINT_Cmd_Get_Img(void)038.{039. unsigned char i;040.041. for(i=0;i<6;i++) //发送包头042. USART1_SendByte(FP_Pack_Head[i]);043.044. for(i=0;i<6;i++) //发送命令 0x1d045. USART1_SendByte(FP_Get_Img[i]);046.047. for(i=0;i<12;i++)//读回应答信息048. dat[i]=USART1_ReceivByte();049.}050.051.//删除所有指纹模版052.void FINGERPRINT_Cmd_Delete_All_Model(void)053.{054. unsigned char i;055.056. for(i=0;i<6;i++) //发送包头057. USART1_SendByte(FP_Pack_Head[i]);058.059. for(i=0;i<6;i++) //发送命令 0x1d060. USART1_SendByte(FP_Delet_All_Model[i]);061.062. for(i=0;i<12;i++)//读回应答信息063. dat[i]=USART1_ReceivByte();064.}065.066.//讲图像转换成特征码存放在Buffer1中067.void FINGERPRINT_Cmd_Img_To_Buffer1(void)068.{069. unsigned char i;070. for(i=0;i<6;i++) //发送包头071. {072. USART1_SendByte(FP_Pack_Head[i]);073. }074. for(i=0;i<7;i++) //发送命令将图像转换成特征码存放在CHAR_buffer1075. {076. USART1_SendByte(FP_Img_To_Buffer1[i]);077. }078. for(i=0;i<12;i++)//读应答信息079. {080. dat[i]=USART1_ReceivByte();//把应答数据存放到缓冲区081. }082.}083.084.//将图像转换成特征码存放在Buffer2中085.void FINGERPRINT_Cmd_Img_To_Buffer2(void)086.{087. unsigned char i;088. for(i=0;i<6;i++) //发送包头089. {090. USART1_SendByte(FP_Pack_Head[i]);091. }092.093. for(i=0;i<7;i++) //发送命令将图像转换成特征码存放在CHAR_buffer1094. {095. USART1_SendByte(FP_Img_To_Buffer2[i]);096. }097. for(i=0;i<12;i++)098. {099. dat[i]=USART1_ReceivByte();//读回应答信息100. }101.}102.103.//将BUFFER1 跟 BUFFER2 中的特征码合并成指纹模版104.void FINGERPRINT_Cmd_Reg_Model(void)105.{106. unsigned char i;107.108. for(i=0;i<6;i++) //包头109. {110. USART1_SendByte(FP_Pack_Head[i]);111. }112.113. for(i=0;i<6;i++) //命令合并指纹模版114. {115. USART1_SendByte(FP_Reg_Model[i]);116. }117.118. for(i=0;i<12;i++)119. {120. dat[i]=USART1_ReceivByte();121. }122.}123.124.//存储模版到特定地址125.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Cha r, unsigned charucL_Char)126.{127. unsigned long temp = 0;128. unsigned char i;129.130. FP_Save_Finger[5] = ucH_Char;131. FP_Save_Finger[6] = ucL_Char;132.133.134. for(i=0;i<7;i++) //计算校验和135. temp = temp + FP_Save_Finger[i];136.137. FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据138. FP_Save_Finger[8]= temp & 0x0000FF;139.140.141. for(i=0;i<6;i++)142. USART1_SendByte(FP_Pack_Head[i]); //发送包头143.144. for(i=0;i<9;i++)145. USART1_SendByte(FP_Save_Finger[i]); //发送命令将图像转换成特征码存放在 CHAR_buffer1146.147. for(i=0;i<12;i++)148. dat[i]=USART1_ReceivByte();149.}150.151.//获得指纹模板数量152.void FINGERPRINT_Cmd_Get_Templete_Num(void)153.{154. unsigned int i;155.156. for(i=0;i<6;i++) //包头157. USART1_SendByte(FP_Pack_Head[i]);158.159. //发送命令 0x1d160. for(i=0;i<6;i++)161. USART1_SendByte(FP_Templete_Num[i]);162.163. for(i=0;i<12;i++)164. dat[i]=USART1_ReceivByte();165.}166.167.//搜索全部用户999枚168.void FINGERPRINT_Cmd_Search_Finger(void)169.{170. unsigned char i;171. //发送命令搜索指纹库172. for(i=0;i<6;i++)173. {174. USART1_SendByte(FP_Pack_Head[i]);175. }176.177. for(i=0;i<11;i++)178. {179. USART1_SendByte(FP_Search[i]);180. }181.182. for(i=0;i<16;i++)183. {184. dat[i]=USART1_ReceivByte();185. }186.}187.188.//搜索用户0~9枚189.void FINGERPRINT_Cmd_Search_Finger_Admin(void) 190.{191. unsigned char i;192. for(i=0;i<6;i++) //发送命令搜索指纹库193. {194. USART1_SendByte(FP_Pack_Head[i]);195. }196.197. for(i=0;i<11;i++)198. {199. USART1_SendByte(FP_Search_0_9[i]);200. }201.202. for(i=0;i<12;i++)203. dat[i]=USART1_ReceivByte();204.}205.206.//添加一个新的指纹207.unsigned char FP_add_new_user(unsigned char ucH_user,u nsigned char ucL_user)208.{209. do210. {211. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像212. } while ( dat[9]!=0x0 ); //检测是否成功的按了指纹213.214. FINGERPRINT_Cmd_Img_To_Buffer1(); //将图像转换成特征码存放在Buffer1中215.216. do217. {218. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像219. } while( dat[9]!=0x0 );220.221. FINGERPRINT_Cmd_Img_To_Buffer2(); //将图像转换成特征码存放在Buffer2中222.223. FINGERPRINT_Cmd_Reg_Model(); //转换成特征码224.225. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);226.227. return 0;228.}第2个 FPM10A.hview sourceprint?01.#ifndef _FPM10A_H02.#define _FPM10A_H03.#include <stdint.h>04.05.extern unsigned char dat[18];06.07.extern void FINGERPRINT_Cmd_Get_Img();08.extern void FINGERPRINT_Cmd_Img_To_Buffer1();09.extern void FINGERPRINT_Cmd_Img_To_Buffer2();10.extern void FINGERPRINT_Cmd_Reg_Model();11.extern void FINGERPRINT_Cmd_Delete_All_Model(void);12.extern void FINGERPRINT_Cmd_Search_Finger(void);13.extern void FINGERPRINT_Cmd_Get_Templete_Num(void);14.extern void FINGERPRINT_Cmd_Search_Finger_Admin(void);15.extern void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char, unsigned charucL_Char);16.extern unsigned char FP_add_new_user(unsigned char ucH _user,unsigned charucL_user);17.18.19.extern void USART1_SendByte(unsigned char temp);20.extern unsigned char USART1_ReceivByte();21.22.extern void Delay_ms1(uint32_t nCount);23.24.void Delay_nus1(uint32_t nCount)25.{26. uint32_t j;27. while(nCount--)28. {29. j=8;30. while(j--);31. }32.}33.34.void Delay_ms1(uint32_t nCount)35.{36. while(nCount--)37. Delay_nus1(1100);38.}39.40.unsigned char test_fig()//检测指纹模块录入指纹情况,返回00表示录入成功;02无手指;03录入失败41.{42. unsigned char fig_dat;43. FINGERPRINT_Cmd_Get_Img();44. Delay_ms1(20);45. fig_dat=dat[9];46. return(fig_dat);47.}48.49.#endif有了这两个东西,加入到你的工程中,就可以直接调用啦!。