[STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录

一、前言

二、详细步骤

1.光学指纹模块

2.配置STM32CUBEMX

3.程序设计

[3.1 输出重定向](#3.1 输出重定向)

[3.2 导入AS608库](#3.2 导入AS608库)

[3.3 更改端口宏定义](#3.3 更改端口宏定义)

[3.4 添加中断处理部分](#3.4 添加中断处理部分)

[3.5 初始化AS608](#3.5 初始化AS608)

[3.6 函数总览](#3.6 函数总览)

[3.7 录入指纹](#3.7 录入指纹)

[3.8 验证指纹](#3.8 验证指纹)

[3.9 删除指纹](#3.9 删除指纹)

[3.10 清空指纹库](#3.10 清空指纹库)

三、总结及资源


一、前言

本文将使用HAL库进行指纹识别模块的开发,需要注意的是,本文使用到的库的基础部分代码来源于网络 ,本文所使用的库是在原库的基础上进行了二次开发和封装,提高了库的操作性和可移植性。

二、详细步骤

1.光学指纹模块

光学指纹模块,使用芯片为AS608。查阅开发手册,可知通信方式是串口通信,波特率为57600。

2.配置STM32CUBEMX

首先,配置好基础的STM32CUBEMX工程,本文使用的是STM32F103C8T6,时钟频率72MHz。

配置UART3作为通信端口,UART1作为状态输出端口,并在代码中输出重定向。使能DMA和串口中断。方法可以看这篇文章:HAL库UART_IT_DMA

3.程序设计

3.1 输出重定向

可以选择在main.c文件中补全这部分代码。

复制代码
#include "stdio.h"

int fputc(int c, FILE* stream)
{
	uint8_t ch[]={c};
	HAL_UART_Transmit(&huart1,ch,1,0xffff);
	return c;
}

3.2 导入AS608库

解压压缩包,包含一个头文件和.c文件,导入到工程中,具体方法可以看这一篇文章里的导入库部分:OLED-HAL库开发

3.3 更改端口宏定义

打开as608.h文件,然后更改其中的AS608_UART宏定义为我们使用的串口。

3.4 添加中断处理部分

这里有个非正规的方法,不需要写中断处理函数,打开stm32f1xx_it.c文件,找到对应的IRQHandler,然后将下面这段代码复制进去(注意需要导入AS608.h)。

复制代码
if(__HAL_UART_GET_FLAG(&AS608_UART,UART_FLAG_IDLE) != RESET)
{
//认为数据接收完成,进行处理
//1、清除空闲中断
__HAL_UART_CLEAR_IDLEFLAG(&AS608_UART);

//2、获取接收大小

//3、清空接收状态

AS608_UART.RxXferCount = sizeof(AS608_RX_BUF);
AS608_UART.pRxBuffPtr = AS608_RX_BUF;
AS608_RX_STA = 1;//接收数据完成
return ;	
}

3.5 初始化AS608

初始化代码:

cs 复制代码
AS608_init();

3.6 函数总览

值得注意的是,以上提到的部分 基本上是来源于网络上已有的资料 ,并我原创攥写,我只对其进行了宏定义串口的操作,便于移植。

在其原库的基础上,我封装并实现了录入指纹删除指纹查询指纹删除指纹库的函数,便于调用,具体如下图。

3.7 录入指纹

根据我封装的函数,我也在头文件最后给出了推荐的录入代码。其包含四步:获取第一次指纹、获取第二次指纹、指纹比对、生成特征码并保存。

第一二步的返回值:成功返回1、未检测到指纹返回-1、指纹不合格返回0

第三四步的返回值:成功返回1、失败返回-1

其中第四步的参数是指纹ID,取值是0+

cs 复制代码
指纹录入基本流程
printf("录入第一次指纹");
while(AS608_Add_FR_Step_one()!=1);
printf("录入第二次指纹");
while(AS608_Add_FR_Step_two()!=1);
while(AS608_Add_FR_Step_three()!=1);
printf("指纹对比成功");
while(AS608_Add_FR_Step_four(1)!=1);
printf("录入成功");

3.8 验证指纹

验证指纹的函数为AS608_Check_FR(),其返回值分别代表:-3 代表未检测到指纹、-2 特征码生成失败、-1 代表该指纹未录入、0及以上返回的是指纹ID(代表存在于指纹库并返回具体的指纹ID,可以保存删除时使用)

cs 复制代码
int i=AS608_Check_FR();
printf("ID=%d",i);
if(i>=0)
{
	printf("指纹验证成功");
}

3.9 删除指纹

删除指纹的函数是int AS608_Delete_FR(uint16_t ID),其参数是指纹ID,因此删除前可以先读取指纹ID,随后删除。 成功返回1、失败返回0。

cs 复制代码
int i=AS608_Check_FR();
printf("ID=%d",i);
if(i>=0 && AS608_Delete_FR(i)==1)
{
	printf("指纹删除成功");
}

3.10 清空指纹库

清空指纹库将删除所有指纹。成功返回1、失败返回0。

cs 复制代码
AS608_Delete_All_FR();

三、总结及资源

本文主要讲述了如何使用HAL库进行AS608模块的开发,UART通信使其移植变得非常简单,可以帮助各位快速上手开发。同时后续我也会在本专栏更新更多详细的开发资料和教学,并将免费开源。

AS608开发手册和上位机:开发手册和上位机软件

AS608-HAL库:AS608-HAL库

本文源工程:AS608工程-STM32CUBEMX

相关推荐
星恒讯工业路由器3 小时前
新一代通信网:从“连接万物”到“智联万物”的关键跃迁
网络·物联网·智能路由器·工业路由器·工业物联网·5g-a·新一代通信网
捷瑞电子工坊3 小时前
FreeRTOS任务管理:从入门到实践(标准库版)
stm32·嵌入式·freertos·实时操作系统·任务管理·标准外设库·任务挂起与恢复
数字化转型分享点滴7 小时前
机加工车间上线 SH‑AIOT 物联网会遇到哪些常见实施难点
python·物联网
鲁邦通物联网7 小时前
出海物联网设备的全球化网络接入与合规脱敏架构:基于 Node-RED 与 C++ 零拷贝的边缘系统设计
网络·物联网·系统架构·边缘计算·边缘计算网关·5g数采·工业级边缘计算网关
星恒讯工业路由器7 小时前
家庭无线组网方式全解析:从单路由到FTTR,哪种适合你?
网络·物联网·智能路由器·路由器·家庭组网·ac+ap·mesh组网
莫浅子8 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
恒锐丰科技韩生8 小时前
SS8844T|8.2‑40V 四通道独立半桥驱动 ETSSOP28 带散热焊盘 工业自动化机器人专用
嵌入式硬件·硬件工程
sibylyue9 小时前
ZLMediaKit流媒体服务
物联网
Hello_Damon_Nikola9 小时前
INMP441从入门到精通
单片机·嵌入式硬件·物联网
恒锐丰小瑞9 小时前
率能SS6810H 32V/1A/双通道H桥驱动芯片,PWM电流控制与混合衰减模式,用于POS打印机/安防相机/机器人
嵌入式硬件·数码相机·机器人·硬件工程