基于STM32F103——AS608指纹模块+串口打印
Posted 皮卡丘吉尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于STM32F103——AS608指纹模块+串口打印相关的知识,希望对你有一定的参考价值。
STM32F103-AS608指纹模块+串口打印
最近用STM32F103做一个智能门锁小玩意,其中用到指纹模块,我这里也单独的写一下笔记,不过我只是了解了基本的,就是我做门禁卡要用到的几个东西,其它还没了解。为了方便,做一下记录。我这里没有用到按键和显示屏,所以还是串口输出输入来控制了 哈哈哈哈
一: 基本介绍
这里就写一下我这次用到的而且觉得是重点的东西吧 毕竟手册还是内容很多的
AS608引脚描述
这里就留意前6个 其中WAK这个引脚 是可以检测手指是否按下的 当有手指按下 WAK引脚是输出高电平 没有手指则维持低电平
AS608模块地址
默认是 0XFFFFFFFF(共4个字节)
我这里就不改了,按默认的了。修改的话请看手册
AS608波特率
默认是57600
我这里也懒得改了,按默认了。修改的话请看手册
AS608指令格式
模块指令格式分为三种,命令包、数据包、结束包。如下图
AS608应答格式
正常是通过检测确认码来确定数据的反馈
比如:
0X00: OK
0X01: 数据包接收错误
0X02: 传感器没有手指
…
手册都有说。这里也就不细发了。
二: 指令集
指令集很多,很多,但是我这里就写一下我这次做门禁卡系统用到的一些指令集。最终能实现 增加指纹、删除指纹、验证指纹。
1.读取图像-PS_GetImage
功能: 读取指纹图像,然后把图像存放于ImageBuffer中。
参数: 无
返回: 确认字
指令代码: 01H
简述:
首先我们通过指令码包给AS608指纹模块让它读取图像,然后指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0003 (2个字节)
5、发送指令码: 0X01 (1个字节)
6、发送校验和: 0X0005 (2个字节)
包长度如何计算的?
我们可以看出来嘛 包长度这个表格是说3个。那么我看后面确实还剩3个字节。1字节的指令码+2字节的校验和 = 3字节。
结论: 包长度: 提示了后面还有多少个字节数据
校验和如何计算的?
我们同样也可以看出来 它的校验和是说是5。那么我们很容易发现,校验和其实是 从 包标识 0x01 + 包长度 0x0003 + 指令码 0x01 = 5。
结论: 校验和 = 包标识开始 + … 到校验和 但不含校验和。
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 录入成功
01H: 收包有误
02H: 没有检测到手指
03H: 录入不成功
SUM(校验和)
2.生成特征-PS_GenChar
功能: 将ImageBuffer中的原始图像生成指纹特征存放CharBuffer1 或者 CharBuffer2。
参数: BufferID(特征缓冲区号) CharBuffer1:01H CharBuffer2:02H
返回: 确认字
指令代码: 02H
简述:
首先我们通过指令码包给AS608指纹模块让它读取图像后如果读取到图像,然后我们发送生成特征指令包,然后指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0004 (2个字节)
5、发送指令码: 0X02 (1个字节)
6、发送缓冲区号: 0x01/0X02 (1个字节)
7、发送校验和: SUM (2个字节)
SUM(校验和的计算):
校验和 = 包标识 + 包长度 + 指令码 + 缓冲区号(BufferID)。
1:当你发送的缓冲区号是0x01时: 校验和 = 0x08
0x01 + 0x0004 + 0x02 + 0x01 = 0x08
2:当你发送的缓冲区号是0x02时: 校验和 = 0x09
0x01 + 0x0004 + 0x02 + 0x02 = 0x09
包长度如何计算的?
我们可以看出来嘛 包长度这个表格是说3个。那么我看后面确实还剩3个字节。1字节的指令码+2字节的校验和 = 3字节。
结论: 包长度: 提示了后面还有多少个字节数据
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 生成特征成功
01H: 收包有误
06H: 指纹太乱
07H: 特征点太少
15H: 没有图像生成
SUM(校验和)
3.比对特征-PS_Match
功能: 将CharBuffer1 和 CharBuffer2 的特征文件比对。
参数: 无
返回: 确认字,对比得分
指令代码: 03H
简述:
首先我们通过指令码包给AS608指纹模块让它对比然后CharBuffer1 和 CharBuffer2 的特征文件,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0003 (2个字节)
5、发送指令码: 0X03 (1个字节)
6、发送校验和: 0X07 (2个字节)
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 指纹匹配成功
01H: 收包有误
08H: 指纹不匹配
SUM(校验和)
4.生成模板-PS_RegModel
功能: 将CharBuffer1 和 CharBuffer2 的特征文件合并生成模板,结果存放在CharBuffer1 与 CharBuffer2
参数: 无
返回: 确认字
指令代码: 05H
简述:
首先我们通过指令码包给AS608指纹模块让它将CharBuffer1 和 CharBuffer2 的特征文件合并生成模板,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0003 (2个字节)
5、发送指令码: 0X05 (1个字节)
6、发送校验和: 0X09 (2个字节)
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 合并成功
01H: 收包有误
0AH: 合并失败(不是同一个手指)
SUM(校验和)
5.储存模板-PS_StoreChar
功能: 将CharBuffer1 和 CharBuffer2 的模板文件,存放到PageID号flash数据库位置
参数: BufferID(缓冲区号 0x01/0x02),PageID(指纹库位置号)
返回: 确认字
指令代码: 06H
简述:
首先我们通过指令码包给AS608指纹模块让它将CharBuffer1 和 CharBuffer2 生成的模板进行储存模板,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0006 (2个字节)
5、发送指令码: 0X06 (1个字节)
6、发送缓冲区号: BufferID (1个字节)
7、发送位置号: PageID (2个字节)
7、发送校验和: SUM (2个字节)
SUM(校验和) = 包标识+包长度+指令码+BufferID+PageID;
SUM(校验和) = 0X01+0X06+0X06+BufferID+PageID;
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 储存模板成功
01H: 收包有误
0BH: PageID超出指纹库范围
18H: 写FLASH出错
SUM(校验和)
你都看到这里了,那么你添加指纹的操作就可以完成了。
6.删除模板-PS_DeletChar
功能: 删除flash数据库中指定ID号开始的N个指纹模板。
参数: PageID(指纹库模板号),N(删除的模板个数)
返回: 确认字
指令代码: 0CH
简述:
首先我们通过指令码包给AS608指纹模块让它删除模板,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0007 (2个字节)
5、发送指令码: 0X0C (1个字节)
6、发送位置号: PageID (2个字节)
7、发送删除个数: N (2个字节)
7、发送校验和: SUM (2个字节)
SUM(校验和) = 包标识+包长度+指令码+PageID+N;
SUM(校验和) = 0X01+0X07+0X0C+PageID+N;
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 删除模板成功
01H: 收包有误
10H: 删除模板失败
SUM(校验和)
7.清空指纹库-PS_Empty
功能: 删除flash数据库所有指纹模板
参数: 无
返回: 确认字
指令代码: 0DH
简述:
首先我们通过指令码包给AS608指纹模块让它清空所有模板,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0003 (2个字节)
5、发送指令码: 0X0D (1个字节)
6、发送校验和: 0X0011 (2个字节)
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0003 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 清空所有成功
01H: 收包有误
10H: 清空所有失败
SUM(校验和)
你都看到这里了,那么你删除指纹的操作就可以完成了。
8.高速搜索指纹-PS_HighSpeedSearch
功能: 以CharBuffer1 或 CharBuffer2中的特征文件高速搜索整个或部分指纹库。如果搜索到,返回页码。
参数: BufferID(0x01/0x02),StartPage(起始页),PageNum(页数)
返回: 确认字,页码(匹配的指纹模板)
指令代码: 1BH
简述:
首先我们通过指令码包给AS608指纹模块让它高速搜索是否和咱这个指纹一样,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0008 (2个字节)
5、发送指令码: 0X1B (1个字节)
6、发送缓冲区号: BufferID (1个字节)
7、发送起始页: StartPage (2个字节)
7、发送页数: PageNum (2个字节)
7、发送校验和: SUM (2个字节)
StartPage(起始页):开始搜索的页码
PageNum(页数): 搜索多少页
SUM(校验和) = 包标识+包长度+指令码+BufferID+StartPage+PageNum;
SUM(校验和) = 0x01+0x08+0x1B+BufferID+StartPage+PageNum;
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0007 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到页码: PageID (2个字节)
7、接收到得分: MatchScore (2个字节)
8、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 搜索到
01H: 收包有误
09H: 没有搜索到 页码和得分也会是 0
SUM(校验和)
9.搜索指纹-PS_Search
功能: 以CharBuffer1 或 CharBuffer2中的特征文件搜索整个或部分指纹库。如果搜索到,返回页码。
参数: BufferID(0x01/0x02),StartPage(起始页),PageNum(页数)
返回: 确认字,页码(匹配的指纹模板)
指令代码: 04H
简述:
首先我们通过指令码包给AS608指纹模块让它搜索是否和咱这个指纹一样,指纹模块会返回应答包给我们。我们通过应答包的确认字去判断这次的结果。
指令包格式:
首先我们是我们给指纹模块发送的内容 可以结合上图指令包格式
1、发送包头: 0XEF01 (2个字节)
2、发送芯片地址: 0XFFFFFFFF (4个字节)
3、发送包标识: 0X01 (1个字节)
4、发送包长度: 0X0008 (2个字节)
5、发送指令码: 0X04 (1个字节)
6、发送缓冲区号: BufferID (1个字节)
7、发送起始页: StartPage (2个字节)
7、发送页数: PageNum (2个字节)
7、发送校验和: SUM (2个字节)
StartPage(起始页):开始搜索的页码
PageNum(页数): 搜索多少页
SUM(校验和) = 包标识+包长度+指令码+BufferID+StartPage+PageNum;
SUM(校验和) = 0x01+0x08+0x04+BufferID+StartPage+PageNum;
应答包格式
发送完指令包给指纹模块 我们则会收到它发的应答包 可以结合上图应答包格式
1、接收到包头: 0XEF01 (2个字节)
2、接收到芯片地址 0XFFFFFFFF (4个字节)
3、接收到包标识: 0X07 (1个字节)
4、接收到包长度: 0X0007 (2个字节)
5、接收到确认码: xxH (1个字节)
6、接收到页码: PageID (2个字节)
7、接收到得分: MatchScore (2个字节)
8、接收到校验和: SUM (2个字节)
xxH(确认码):
00H: 搜索到
01H: 收包有误
09H: 没有搜索到 页码和得分也会是 0
SUM(校验和)
这两个都是搜索。。一个高速一个不是 我估计就是高速更快,但是估计没不高速那个那么精确吧。个人感觉。
你都看到这里了,那么你验证指纹的操作就可以完成了。
10.查有效模板个数-PS_ValidTempleteNum
功能: 读取有效模板个数(查询当前一共有多少个指纹)
参数: 无
返回AS608指纹+STM32串口通信录入或删除指纹
基于STM32F103+AS608指纹模块+4X4矩阵按键+SIM900A发短信——智能门禁卡系统
基于STM32F103+AS608指纹模块+4X4矩阵按键+SIM900A发短信——智能门禁卡系统
基于STM32F103+AS608指纹模块+RFID-RC522射频模块+OLED显示模块+4x4矩阵键盘+HC-05蓝牙模块发验证码----智能门禁系统