[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

相关推荐
Wallace Zhang3 小时前
STM32F103_Bootloader程序开发11 - 实现 App 安全跳转至 Bootloader
stm32·嵌入式硬件·安全
GodKK老神灭3 小时前
STM32 CCR寄存器
stm32·单片机·嵌入式硬件
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
杰克逊的日记9 天前
MCU编程
单片机·嵌入式硬件
Python小老六9 天前
单片机测ntc热敏电阻的几种方法(软件)
数据库·单片机·嵌入式硬件
懒惰的bit9 天前
STM32F103C8T6 学习笔记摘要(四)
笔记·stm32·学习
技术支持者python,php9 天前
MQTT通讯:物联网
物联网·智能家居
HX科技10 天前
STM32给FPGA的外挂FLASH进行升级
stm32·嵌入式硬件·fpga开发·flash·fpga升级
Suagrhaha10 天前
驱动入门的进一步深入
linux·嵌入式硬件·驱动
国科安芯10 天前
基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
嵌入式硬件·硬件架构·硬件工程