当前位置: 首页 > news >正文

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

目录

一、前言

二、详细步骤

        1.光学指纹模块

        2.配置STM32CUBEMX

        3.程序设计

        3.1 输出重定向

        3.2 导入AS608库   

        3.3 更改端口宏定义

        3.4 添加中断处理部分

        3.5 初始化AS608

        3.6 函数总览

        3.7 录入指纹

        3.8 验证指纹

        3.9 删除指纹

        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

        初始化代码:

AS608_init();

        3.6 函数总览

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

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

        3.7 录入指纹

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

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

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

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

指纹录入基本流程
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,可以保存删除时使用)

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。

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

        3.10 清空指纹库

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

AS608_Delete_All_FR();

三、总结及资源

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

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

        AS608-HAL库:AS608-HAL库

        本文源工程:AS608工程-STM32CUBEMX

相关文章:

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

目录 一、前言 二、详细步骤 1.光学指纹模块 2.配置STM32CUBEMX 3.程序设计 3.1 输出重定向 3.2 导入AS608库 3.3 更改端口宏定义 3.4 添加中断处理部分 3.5 初始化AS608 3.6 函数总览 3.7 录入指纹 3.8 验证指纹 3.9 删除指纹 3.10 清空指纹库 三、总结及资源 一、前言 …...

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 (1)面向机器语言 计算机处理信息的早期语言是所谓的机器语言,使用机器语言进行程序设计需要面向机器来编写代码,即需要针对不同的机器编写诸如0101 1100这样的指令序列。 (2&#x…...

ios:Command PhaseScriptExecution failed with a nonzero exit code

问题 使用 xcode 跑项目真机调试的时候,一直报错 Command PhaseScriptExecution failed with a nonzero exit code。 解决 最终靠以下方法解决 删除Podfile.lock文件删除Pods文件删除.xcworkspace文件Pod installCommandShiftK 清理一下缓存 亲测有效...

《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】

背景: 有些同学在大一或者大二可能会被老师建议参加蓝桥杯,本视频和文章主要是以一个过来人的身份来给与大家一些思路。 比如蓝桥杯是什么?我是否要参加蓝桥杯?参加蓝桥杯该选择何种语言?如何科学备赛?等…...

数据挖掘案例-航空公司客户价值分析

文章目录 1. 案例背景2. 分析方法与过程2.1 分析流程步骤2.2 分析过程1. 数据探索分析2. 描述性统计分析3. 分布分析1.客户基本信息分布分析2. 客户乘机信息分布分析3. 客户积分信息分布分析 4. 相关性分析 3. 数据预处理3.1 数据清洗3.2 属性约束3. 3 数据转换 4. 模型构建4. …...

决策树与机器学习实战【代码为主】

文章目录 🛴🛴引言🛴🛴决策树使用案例🛴🛴numpy库生成模拟数据案例🛴🛴决策树回归问题🛴🛴决策树多分类问题 🛴🛴引言 决策树是一种经…...

从感知机到神经网络

感知机 一、感知机是什么二、用感知机搭建简单逻辑电路2.1 与门2.2 与非门2.3 或门 三、感知机的局限性3.1 异或门3.2 线性和非线性 四、多层感知机4.1 已有门电路的组合4.2 Python异或门的实现 五、感知机模型5.1 感知机模型5.2 感知机损失函数5.3 感知机学习算法 六、感知机原…...

【HMGD】STM32/GD32 I2C DMA 主从通信

STM32 I2C配置 主机配置 主机只要配置速度就行 从机配置 从机配置相同速度,可以设置第二地址 因为我的板子上面已经有了上拉电阻,所以可以直接通信 STM32 I2C DMA 定长主从通信代码示例 int state 0; static uint8_t I2C_recvBuf[10] {0}; stat…...

leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度

leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度 leecode 226 翻转二叉树 题目链接 :https://leetcode.cn/problems/invert-binary-tree/description/ 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。…...

Redux基础

简介 状态管理工具,集中式管理react、vue、angular等应用中多个组件的状态,是一个库,使用之后可以清晰的知道应用里发生了什么以及数据是如何修改,如何更新的 在项目中添加 Redux 并不是必须的,根据项目需求选择是否引入 Redux 三个原则 …...

国外目标公司的任何一个联系人也许都有意义

我们说跟进一个项目,最好能够联系上拥有决策权的人,不然中间隔着几重关系,所有的更新都需要层层审批申报,特别麻烦,总是要等,也许等到最后就是一场空。如果能够直接和老板或者是拍板的人沟通,则…...

因为本地证书太旧或不全导致的 HTTPS 访问失败问题20240520

因为本地证书太旧或不全导致的 HTTPS 访问失败问题 在生产环境中,我们经常需要使用 curl 命令来测试和调试 HTTPS URL。然而,最近我遇到了一个棘手的问题:在测试环境中使用 curl 可以正常访问某个 URL,但在生产环境中却遇到了 SS…...

Lua获取表的长度

1.代码 -- 创建一个表并添加一些元素 local myTable {10, 20, 30, 40}-- 打印表的长度 print(#myTable) -- 输出 4,因为表中有 4 个元素-- 使用 # 来遍历表中的所有元素 for i 1, #myTable doprint(myTable[i]) end -- 这将依次打印 10, 20, 30, 40...

python九九乘法表的打印思考及实现

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、问题引入 九九乘法表的显示需求 二、问题分析 嵌套循环的概念 屏幕宽度与换行的考虑…...

2.Spring中用到的设计模式

Spring框架中使用了多种设计模式来构建其强大且灵活的功能,这里举例说明Spring中的一些功能使用到的设计模式。 工厂模式:Spring容器本质是一个大工厂,使用工厂模式通过BeanFactory和ApplicationContext这两个核心接口来创建和管理bean对象。…...

.NET调用阿里云人脸核身服务端 (ExecuteServerSideVerification)简易流程保姆级教学

需要注意的是,以下内容仅限基础调用 功能说明 该功能是输入核验人的姓名和身份证以及人脸照片,去阿里库里面匹配,3个信息是否一致,一致则验证通过,需要注意的是,人脸有遮挡,或者刘海&#xff0…...

[大师C语言(第十二篇)]C语言堆排序技术详解

引言 堆排序(Heap Sort)是一种基于比较的排序算法,它利用堆这种数据结构的特点来进行排序。堆是一种近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父…...

Activity启动流程要点

一、Activity启动流程 Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的startActivity内部也是通过调用startActivityForResult来启动Activity,只不过传递的requestCode小于0Activity的启动流程涉及到多个进程之间的通讯这里主…...

lua 计算第几周

需求 计算当前赛季的开始和结束日期,2024年1月1日周一是第1周的开始,每两周是一个赛季。 lua代码 没有处理时区问题 local const 24 * 60 * 60 --一整天的时间戳 local server_time 1716595200--todo:修改服务器时间 local date os.date("*t…...

负载均衡策略

...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...