linux 指纹模块串口驱动,AS608指纹模块的stm32驱动源码

该代码展示了如何使用STM32微控制器与AS608指纹识别模块进行通信,完成指纹的添加、删除和匹配操作。通过串口2初始化并与指纹模块握手,然后根据GPIO输入信号执行相应功能,如添加指纹或对比指纹。同时,利用OLED显示屏进行状态反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "usart2.h"

#include "AS608.h"

#include "timer.h"

#include "oled.h"

#define usart2_baund  57600 //

SysPara AS608Para;          //

u16 ValidN;                 //

void Add_FR(void);        //添加指纹

void Del_FR(void);        //删除指纹

void press_FR(void);//比对指纹

int main(void)

{

u8 ensure;

u8 key_num;

char *str;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

delay_init();              //初始化延时函数

uart_init(115200);        //初始化串口1波特率为115200,用于支持USMART

usart2_init(usart2_baund);//初始化串口2,用于与指纹模块通讯

PS_StaGPIO_Init();        //初始化FR读状态引脚

OLED_Init();           //OLED初始化  //初始化显示

OLED_ShowStr(0,0,(unsigned char*)" FINGERPRINT ID ",2);

OLED_ShowStr(0,2,(unsigned char*)"                ",2);

OLED_ShowStr(0,4,(unsigned char*)"                ",2);

OLED_ShowStr(0,6,(unsigned char*)"                ",2);

//与指纹模块握手

while(PS_HandShake(&AS608Addr))

{

OLED_ShowStr(0,2,(unsigned char*)" ShakHands....",2);

}

//握手通过

OLED_ShowStr(0,2,(unsigned char*)" Ready To Work ",2);

delay_ms(100);

while(1)

{

press_FR();

//添加指纹

if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0)

{

delay_ms(10);

if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0)

{

//setup=setup+2000;

Add_FR();

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

}

}

//对比指纹

if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)

{

delay_ms(10);

if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)

{

Del_FR();

OLED_ShowStr(0,4,(unsigned char*)" FUN:DEL FRIGER ",2);

}

}

}

}

void ShowErrMessage(u8 ensure)

{

}

void Add_FR(void)

{

u8 i=0,ensure ,processnum=0;

u16 ID;

while(1)

{

switch (processnum)

{

case 0:

i++;

OLED_ShowStr(0,6,(unsigned char*)" Touch finger!  ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

ensure=PS_GetImage();

if(ensure==0x00)

{

ensure=PS_GenChar(CharBuffer1);//????

if(ensure==0x00)

{

OLED_ShowStr(0,6,(unsigned char*)" Figer Correct  ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

i=0;

processnum=1;

}else ShowErrMessage(ensure);

}else ShowErrMessage(ensure);

break;

case 1:

i++;

OLED_ShowStr(0,6,(unsigned char*)" Touch Again!   ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

ensure=PS_GetImage();

if(ensure==0x00)

{

ensure=PS_GenChar(CharBuffer2);//

if(ensure==0x00)

{

OLED_ShowStr(0,6,(unsigned char*)" Figer Correct  ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

i=0;

processnum=2;

}else ShowErrMessage(ensure);

}else ShowErrMessage(ensure);

break;

case 2:

OLED_ShowStr(0,6,(unsigned char*)" Figer Compare  ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

ensure=PS_Match();

if(ensure==0x00)

{

OLED_ShowStr(0,6,(unsigned char*)" Figer are same ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

processnum=3;

}

else

{

ShowErrMessage(ensure);

i=0;

processnum=0;

}

delay_ms(1000);

break;

case 3:

OLED_ShowStr(0,6,(unsigned char*)" Touch Again!   ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

ensure=PS_RegModel();

if(ensure==0x00)

{

OLED_ShowStr(0,6,(unsigned char*)" Comper Success!",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

processnum=4;//?????

}else {processnum=0;ShowErrMessage(ensure);}

delay_ms(1000);

break;

case 4:

do

ID=1;

while(!(ID<300));

ensure=PS_StoreChar(CharBuffer2,ID);

if(ensure==0x00)

{

OLED_ShowStr(0,6,(unsigned char*)"  ADD Success!  ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);

PS_ValidTempleteNum(&ValidN);

delay_ms(1500);

return ;

}else {processnum=0;ShowErrMessage(ensure);}

break;

}

delay_ms(800);

if(i==5)//

{

break;

}

}

}

/**************************************************************

DESC:对比指纹

*****************************************************************/

void press_FR(void)

{

SearchResult seach;

u8 ensure;

OLED_ShowStr(0,6,(unsigned char*)" Begin Compare ",2);

ensure=PS_GetImage();

if(ensure==0x00)//

{

ensure=PS_GenChar(CharBuffer1);

if(ensure==0x00) //

{

ensure=PS_HighSpeedSearch(CharBuffer1,0,300,&seach);

if(ensure==0x00)//

{

OLED_ShowStr(0,6,(unsigned char*)" Comper PASS!   ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:CPR FRIGER ",2);

}

else

{

OLED_ShowStr(0,6,(unsigned char*)" Comper Fail!   ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:CPR FRIGER ",2);

}

}

else

{

OLED_ShowStr(0,6,(unsigned char*)" Comper Fail!   ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:CPR FRIGER ",2);

}

delay_ms(1000);//

}

}

/******************************************************************************

DESC:删除指纹

*******************************************************************************/

void Del_FR(void)

{

u8  ensure;

delay_ms(50);

ensure=PS_Empty();//?????

if(ensure==0)

{

OLED_ShowStr(0,6,(unsigned char*)" FINGER DELL OK ",2);

OLED_ShowStr(0,4,(unsigned char*)" FUN:DEL FRIGER ",2);

}

delay_ms(1500);//???????

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值