AS608指纹模块的调试及录入指纹、验证指纹代码实现

AS608指纹模块的调试与具体代码实现

AS608模块引脚:

序号名称说明技术特性
1Vi模块电源正输入端主供电引脚(范围参考手册值)
2Tx串行数据输出端TTL逻辑电平(兼容3.3V/5V系统)
3Rx串行数据输入端TTL逻辑电平(需外部控制器驱动)
4GND信号接地端与电源地内部直连
5WAK感应信号输出高电平有效(非接触触发信号)
6Vt触摸感应电源输入低压供电端(建议.3V)
7U+USB D+数据线USB通信差分信号正极
8U-USB D-数据线USB通信差分信号负极

验证AS608模块是否可以正常使用

我们通过上位机和CH341 USB转TTL模块来进行验证。

AS608与CH341接线如图,接完后插入电脑USB口中:

序号AS608CH341
1ViVCC
2TxRx
3RxTx
4GNDGND

在这里插入图片描述

注意:两个跳线帽,一个接TTL,一个接3.3V

在这里插入图片描述

我这里使用的是厂商资料里自带的上位机软件。

第一步:打开设备连接,选择我们的端口型号(在设备管理器中可查看)

在这里插入图片描述

第二步:把手指放在指纹模块上,点击获取图像,如果图像获取成功,则证明我们的AS608指纹模块是完好无损,可正常使用的。

AS608与CH32开发板进行串口通信

AS608与CH32V307ZET6开发板接线如图(我们使用的是CH32的串口7):

序号AS608CH32
1Vi3.3V
2TxPC2
3RxPC3
4GNDGND
5WAKPA1
6Vt3.3V

串口7主要函数

/* 变量声明 */
uint8_t uart7_rec_string[20]={0};               //串口7接收数组
uint8_t uart7_rec_index;                        //串口7接收索引值
uint8_t uart7_rec_tick;                         //串口7接收时间
uint8_t mode;								 //指纹工作模式,0-验证指纹,1-录入指纹
uint8_t ps_wait_flag;
uint8_t as608_proc_flag;					  //指纹处理标志位 0-未检测到手指,1-已检测到手指
uint8_t as608_proc_flag_old;				  //上一次的指纹处理标志位
uint8_t as608_store_index=1;				  //flash存放位置索引值
uint8_t ps_wait_flag;						 //等待标志位 0-退出等待函数,1-执行等待函数
/* 串口7初始化函数 */
void Uart7_Init()
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef  NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART7 , ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;//2TX 3RX
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOC, &GPIO_InitStructure);

    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;

    USART_Init(UART7, &USART_InitStructure);

    USART_ITConfig(UART7, USART_IT_RXNE,ENABLE);

    NVIC_InitStructure.NVIC_IRQChannel = UART7_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    USART_Cmd(UART7, ENABLE);
    USART_ClearFlag(UART7,USART_FLAG_TC);//清空串口7的发送标志位
}
/* 串口7中断 */
void UART7_IRQHandler(void)
{
    u8 temp=0;
    if(USART_GetITStatus(UART7, USART_IT_RXNE) != RESET)
       {
        ps_wait_flag=0;//复位等待标志位
        if(uart7_rec_tick>10)uart7_rec_index=0;//超过10毫秒没接收到数据时,串口7接收索引值归零
        temp=USART_ReceiveData(UART7);
        uart7_rec_string[uart7_rec_index]=temp;//接收串口7的数据,并依次存储到数组里面
        uart7_rec_index++;//串口7接收索引值++
        uart7_rec_tick=0;//串口7接收时间归零
       }
    USART_ClearITPendingBit(UART7, USART_IT_RXNE);
}
中断触发监测包间隔中断触发
/* 串口7快速中断 */
void UART7_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
/* 串口7发送数据函数 */
void uart7_send_string(u8* string,u8 len)
{
    u8 i;
    for(i=0;i<len;i++)
    {
        USART_SendData(UART7,string[i]);
        while(  USART_GetFlagStatus(UART7, USART_FLAG_TC)==0 );
    }
}

注意:串口7快速中断,需要放在main.c中。

AS608.c源文件

/* AS608初始化函数 */
void as608_init()
{
   Uart7_Init();
}

按两次指纹登录一个模板存入flash指纹库的流程框图:

在这里插入图片描述

从传感器读入现场指纹搜索从 10—100 的指纹库区间的流程框图:

在这里插入图片描述

ps_getimage():录入图像函数

在这里插入图片描述

/* 从传感器中读取图像存于图像缓存区 */
void ps_getimage()
{
    //Get_Image的指令包
    uint8_t string[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x01,0x00,0x05};
    uart7_send_string(string,12);//发送给指纹模块
}
ps_genchar():生成特征函数

在这里插入图片描述
在这里插入图片描述

/* 生成特征,并存放在buffer中 */
void ps_genchar(uint8_t buffer)
{
    //PS_GenChar的指令包
    uint8_t string[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x04,0x02,buffer,0x00,0x01+0x00+0x04+0x02+buffer};
    uart7_send_string(string,13);//发送给指纹模块
}
ps_storechar():储存模板

在这里插入图片描述

/* 存入flash指纹库 */
void ps_storechar(uint8_t addr)
{
    //PS_StoreChar的指令包
    u8 string[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x06,0x06,0x02,0x00,addr,0x00,0x01+0x00+0x06+0x06+0x02+0x00+addr};
    uart7_send_string(string,15);
}
PS_Search():验证指纹

在这里插入图片描述

/* 验证指纹 */
void PS_Search()
{
    u8 string[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x08,0x04,0x02,0x00,0x00,0x00,0xff,0x01,0x0e};
     uart7_send_string(string,17);

}
PS_Empty():清空指纹

在这里插入图片描述

在这里插入图片描述

/* 清空指纹 */
void PS_Empty()
{
    u8 string[]={0xef,0x01,0xff,0xff,0xff,0xff,0x01,0x00,0x03,0x0d,0x00,0x11};
    uart7_send_string(string,12);

}
As608_Gpio_Init():配置AS608指纹识别模块的控制引脚
/*初始化*/
void As608_Gpio_Init()
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
Ps_Wait():等待函数
void Ps_Wait()
{
  ps_wait_flag=1;  // 设置等待标志位
  do
  {
   Delay_Ms(200);  // 200毫秒延时
  }
   while(ps_wait_flag);  // 循环直到标志位清零
}
AS608_proc程序Ps_Waitps_wait_flagAS608模块UART7UART7中断调用等待函数设为1进入循环每200ms检查一次标志发送响应数据触发接收中断设为0标志清零,退出循环AS608_proc程序Ps_Waitps_wait_flagAS608模块UART7UART7中断
AS608_proc():指纹处理函数
void AS608_proc()
{
    as608_proc_flag = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);//读取连接AS608模块的PA1引脚当前电平,高电平(WAK有效,表示检测到手指触摸)
    if(as608_proc_flag == as608_proc_flag_old) return;//比较当前状态与前一次状态,如果状态未发生变化(相同),则立即退出函数
        as608_proc_flag_old = as608_proc_flag;//更新历史状态
    if(as608_proc_flag == 0)return;//抬起时就return

    if(mode == 1)//录入指纹
    {
        // 第一次采集
        ps_getimage();//获取指纹图像到暂存区
        ps_wait();//等待接收数据包
        ps_genchar(1);//存放到 buffer1 中
        ps_wait();//等待接收数据包
        
         // 第二次采集
        ps_getimage();//获取指纹图像到暂存区
        ps_wait();//等待接收数据包
        ps_genchar(2);//存放到 buffer2 中
        ps_wait();//等待接收数据包
        
        // 合成存储
        ps_regmode1();//合成特征
        ps_wait();//等待接收数据包
        ps_storechar(as608_store_index);//存入flash模块区
        as608_store_index++;//更新索引
        ps_wait();//等待接收数据包

        mode = 0;//mode回到验证指纹模式
    }

    if(mode == 0)//验证指纹
    {
        // 单次采集
        ps_getimage();//获取指纹图像到暂存区
        ps_wait();//等待接收数据包
        ps_genchar(2);//存放到 buffer2 中
        ps_wait();//等待接收数据包
        
        // 匹配识别
        PS_Search();//: 以 CharBuffer1 或 CharBuffer2 中的特征文件搜索整个或部分指纹库。若搜索到,则返回页码
        ps_wait();//等待接收数据包

        // 结果判断
        if(uart7_rec_string[13] > 50)//指纹匹配,匹配分数阈值判断
        {
            
        }
        else//指纹不匹配
        {
            
        }
    }

}
mode=1
mode=0
分数>50
分数≤50
待机
指纹接触检测
录入模式
采集指纹1
生成特征1
采集指纹2
生成特征2
合成模板
存储模板
提示成功
验证模式
采集指纹
生成特征
搜索匹配
验证成功
验证失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值