1. 使用资源
- stm32RCT6板子
- AS608指纹模块
软件资源:
- 串口二资源连接AS608 TX RX接线
- AS608 wak线连接PA8设置外部中断触发检测是否有手指按下
接线: 红-vi3.3v 黄-TX-PA3 白-RX-PA2 黑-GEND 蓝-wak-PA8 绿-Vt-3.3 这颜色只对应我手里的模块
2. 实现思路简述
指纹模块识别,需要录入指纹,然后在进行识别判断,那么怎么判断有手指按下呢?这里就需要外部中断实现,AS608的wak线连接指纹识别那里的电压,当有手指按下时,电压发生变化,触发外部中断,可以在中断里设个标志位,触发中断后置1,当判断有手指按下后,然后进行指纹识别对比等操作,这里外部中断设置为上升沿触发即可,因为当手指松开时还会有出现下降沿,而这时不需要触发中断
3. 指纹测试代码
3.1 部分代码介绍
串口初始化以及外部中断初始化:
void AS608_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
USART_InitTypeDef USART_InitStructure;
/*开启串口GPIO口的时钟*/
RCC_APB2PeriphClockCmd(AS608_TouchOut_INT_GPIO_CLK,ENABLE);
AS608_USART_GPIO_APBxClkCmd(AS608_USART_GPIO_CLK, ENABLE);
/*打开串口外设的时钟*/
AS608_USART_APBxClkCmd(AS608_USART_CLK, ENABLE);
/* 配置 NVIC 中断*/
NVIC_Configuration();
/* TouchOut线用到的GPIO */
GPIO_InitStructure.GPIO_Pin = AS608_TouchOut_INT_GPIO_PIN;
/* 配置为浮空输入 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(AS608_TouchOut_INT_GPIO_PORT, &GPIO_InitStructure);
/* 选择EXTI的信号源 */
GPIO_EXTILineConfig(AS608_TouchOut_INT_EXTI_PORTSOURCE, AS608_TouchOut_INT_EXTI_PINSOURCE);
EXTI_InitStructure.EXTI_Line = AS608_TouchOut_INT_EXTI_LINE;
/* EXTI为中断模式 */
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 上升沿中断 */
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;
/* 使能中断 */
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/*将USART Tx的GPIO配置为推挽复用模式*/
GPIO_InitStructure.GPIO_Pin = AS608_USART_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(AS608_USART_TX_GPIO_PORT, &GPIO_InitStructure);
/*将USART Rx的GPIO配置为浮空输入模式*/
GPIO_InitStructure.GPIO_Pin = AS608_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(AS608_USART_RX_GPIO_PORT, &GPIO_InitStructure);
/*配置串口的工作参数*/
/*配置波特率*/
USART_InitStructure.USART_BaudRate = AS608_USART_BAUDRATE;
/*配置 针数据字长*/
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_Rx | USART_Mode_Tx;
/*完成串口的初始化配置*/
USART_Init(AS608_USART, &USART_InitStructure);
/*使能串口接收中断*/
USART_ITConfig(AS608_USART, USART_IT_RXNE, ENABLE);
USART_ITConfig(AS608_USART, USART_IT_IDLE, ENABLE ); //使能串口总线空闲中断
/*使能串口*/
USART_Cmd(AS608_USART, ENABLE);
}
外部中断函数:
u8 press=0;
void AS608_TouchOut_IRQHandler(void)
{
/*确保是否产生了EXTI Line中断*/
if(EXTI_GetITStatus(AS608_TouchOut_INT_EXTI_LINE) != RESET)
{
press=1; EXTI_ClearITPendingBit(AS608_TouchOut_INT_EXTI_LINE);
}
}
3.2 源码链接
这里放的源码为野火的,功能比较齐全,我自己的源码是在上面进行删减的
链接: https://pan.baidu.com/s/1FMo1N-CQGrksOW9c7Oypyw 提取码: 4tag
串口输出: