[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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13529.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[力扣題解] 797. 所有可能的路徑

題目&#xff1a;797. 所有可能的路徑 思路 深度搜索 代碼 // 圖論哦!class Solution { private:vector<vector<int>> result;vector<int> path;// x : 當前節點void function(vector<vector<int>>& graph, int x){int i;// cout <&l…

解決鼠標滾動時element-ui日期選擇器錯位的問題

解決方案&#xff1a;監聽鼠標滾動事件&#xff0c;在鼠標滾動時隱藏element-ui日期選擇器下拉框 1、先在util文件夾下創建個hidePicker.js文件&#xff0c;代碼如下&#xff1a; let el nullconst fakeClickOutSide () > {const SELECTWRAP_BODY document.body // bod…

Day37 貪心算法part04

LC860檸檬水找零(未掌握) 未掌握分析&#xff1a;20的時候找零卡住&#xff0c;同時貪心思路就想了很久 當bill[i]20的時候&#xff0c;我們有兩種找零范式&#xff0c;找零10、5和找零三個5&#xff0c;優先找零10、5&#xff0c;因為三個5是可以替代10、5的情況的&#xff0…

Nebula街機模擬器 Mac移植版(400+游戲roms)漢化版

nebula星云模擬器是電腦上最熱門的街機游戲模擬器之一&#xff0c;玩家可以通過這個小巧的模擬器軟件進行多款經典街機游戲啟動和暢玩&#xff0c;本次移植的包含400多款游戲roms&#xff0c;經典的三國志、三國戰紀、拳皇、街霸、合金彈頭、1941都包含在內。 下載地址&#xf…

CompletableFuture的主要用途是什么?

CompletableFuture 的主要用途是為復雜的異步編程模型提供一種更簡單&#xff0c;更具可讀性的方式。它主要用于以下幾個方面&#xff1a; 非阻塞計算&#xff1a;CompletableFuture 為處理高延遲的計算任務提供了非阻塞的解決方案。你可以啟動一個計算任務&#xff0c;而不需要…

前端 CSS 經典:好看的標題動畫

前言&#xff1a;好看的標題動畫實現。 效果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…

YOLOv5 AssertionError: “XXX” acceptable suffix is [‘.pt‘]

使用終端訓練YOLOv5模型報錯&#xff0c;原命令為&#xff1a; “python train.py --img 640 --batch 1 --epochs 25 --data "C:\Users\GRT\PycharmProjects\yolov5-7.0\animal_training\dataset.yaml " --weights “C:\Users\GRT\PycharmProjects\yolov5-7.0\MyFunc…

組播協議簡介

一、組播協議介紹 組播協議是一種網絡通信協議&#xff0c;它允許一個發送者同時向多個接收者發送數據。以下是組播協議的一些特點&#xff1a; 高效性&#xff1a;組播協議可以有效地利用網絡帶寬&#xff0c;因為它只需要發送一份數據副本&#xff0c;就可以被多個接收者同…

藍橋樓賽第30期-Python-第三天賽題 從參數中提取信息題解

樓賽 第30期 Python 模塊大比拼 提取用戶輸入信息 介紹 正則表達式&#xff08;英文為 Regular Expression&#xff0c;常簡寫為regex、regexp 或 RE&#xff09;&#xff0c;也叫規則表達式、正規表達式&#xff0c;是計算機科學的一個概念。 所謂“正則”&#xff0c;可以…

docker swarm多主機之間的端口無法訪問,但能ping通 問題排查及解決

已排查&#xff1a;1.ufw status 防火墻已關閉 2.selinux已關閉 3.netstat -ntpl :::8088 未限制ip 問題&#xff1a;docker swarm多主機之間的端口無法訪問&#xff0c;但能ping通&#xff0c;同一主機下的端口也可以訪問。 原因&#xff1a;docker overlay網絡內部使用…

【Linux取經路】初識線程——線程控制

文章目錄 一、什么是線程&#xff1f;1.1 Linux 中線程該如何理解&#xff1f;1.2 如何理解把資源分配給線程&#xff1f;1.2.1 虛擬地址到物理地址的轉換 1.3 線程 VS 進程1.3.1 線程為什么比進程更輕量化&#xff1f;1.3.2 線程的優點1.3.3 線程缺點1.3.4 線程異常1.3.5 線程…

關于基礎的流量分析(1)

1.對于流量分析基本認識 1&#xff09;簡介&#xff1a;網絡流量分析是指捕捉網絡中流動的數據包&#xff0c;并通過查看包內部數據以及進行相關的協議、流量分析、統計等來發現網絡運行過程中出現的問題。 2&#xff09;在我們平時的考核和CTF比賽中&#xff0c;基本每次都有…

MySQL用戶管理操作

用戶權限管理操作 DCL語句 一.用戶管理操作 MySQL軟件內部完整的用戶格式&#xff1a; 用戶名客戶端地址 admin1.1.1.1這個用戶只能從1.1.1.1的客服端來連接服務器 admin1.1.1.2這個用戶只能從1.1.1.2的客服端來連接服務器 rootlocal host這個用戶只能從服務器本地進行連…

Prompt - 流行的10個框架

轉載自&#xff1a;https://juejin.cn/post/7287412759050289212 文章目錄 1、ICIO框架2、CRISPE框架3、BROKE框架4、CREATE框架5、TAG框架6、RTF框架7、ROSES框架8、APE框架9、RACE框架10、TRACE框架 測試用例 為了看到不同的Prompt框架效果&#xff0c;本文定義一個統一的測…

ACM實訓

【碎碎念】繼續搞習題學習&#xff0c;今天完成第四套的ABCD&#xff0c;為下一周擠出時間復習&#xff0c;加油 Digit Counting 問題 法希姆喜歡解決數學問題。但有時解決所有的數學問題對他來說是一個挑戰。所以有時候他會為了解決數學難題而生氣。他拿起一支粉筆&#xff…

Java面試八股之進程和線程的區別

Java進程和線程的區別 定義與作用&#xff1a; 進程&#xff1a;在操作系統中&#xff0c;進程是程序執行的一個實例&#xff0c;是資源分配的最小單位。每個進程都擁有獨立的內存空間&#xff0c;包括代碼段、數據段、堆空間和棧空間&#xff0c;以及操作系統分配的其他資源…

工廠模式(簡單工廠模式+工廠模式)

工廠模式的目的就是將對象的創建過程隱藏起來&#xff0c;從而達到很高的靈活性&#xff0c;工廠模式分為三類&#xff1a; 簡單工廠模式工廠方法模式抽象工廠模式 在沒有工廠模式的時候就是&#xff0c;客戶需要一輛馬車&#xff0c;需要客戶親自去創建一輛馬車&#xff0c;…

PDF之Blend Mode(混合模式)BM(對應OFD的BlendMode)

Blend Mode&#xff08;混合模式&#xff09;用于定義對象與背景或其他對象之間的顏色混合方式。PDF支持多種混合模式&#xff0c;常見的混合模式包括&#xff1a; Normal&#xff1a;正常混合模式&#xff0c;將對象顏色直接疊加在背景上。 Multiply&#xff1a;乘法混合模式…

經驗分享:C++ error:‘syscall’ was not declared in this scope

明明已經加了頭文件 #include <sys/syscall.h>#define gettid() syscall(__NR_gettid)但是依舊不能使用 syscall() 函數&#xff0c; 檢查源碼后&#xff1a; sys/syscall.h 內部表示&#xff0c;他封裝了 打開對應的 syscall.h 文件內部依舊沒有 syscall()函數的聲明…

使用docker+jenkins構建前端項目發布到nginx

1.準備環境 為了方便公司開發優化代碼&#xff0c;不需要反復地將項目包發送給運維部署&#xff0c;我們對開發環境的前端項目利用jenkinsCI/CD進行自動化部署 需要兩臺服務器 一臺jenkins 一臺發布服務器,這里發布服務器 我直接使用開發環境的服務器 將admin界面與云計算展示…