有时候,心梗只在一瞬间,卡了很久的指纹模块今天突然发现是波特率的原因===
先来看一下指纹模块:
到手的模块应该是只有6根线,不过我们只需要接前4根线即可,不需要接后面的,因为指纹模块是通过串口发送指令,让模块识别有无手指按下。
我们要先用上位机软件对其进行调试,用串口和指纹模块连起来接在电脑上,打开我们的软件,进行录入指纹,搜索指纹等操作,用来判断模块是否是好的,不过这并不代表已经录入指纹了,到时候还是得通过程序录入指纹。
测试没问题之后,就进行我们的cube配置,这里用的是串口3,并使能中断。
然后是代码部分:
先测试录入指纹的函数:
//录指纹
void Add_FR(void)
{
uint8_t i, ensure, processnum = 0;
uint8_t ID_NUM = 0;
while(1)
{
switch (processnum)
{
case 0:
i++;
printf("请按手指\r\n");
ensure = PS_GetImage();
if(ensure == 0x00)
{
ensure = PS_GenChar(CharBuffer1); //生成特征
if(ensure == 0x00)
{
printf("指纹正常\r\n");
i = 0;
processnum = 1; //跳到第二步
}
else ShowErrMessage(ensure);
}
else ShowErrMessage(ensure);
break;
case 1:
i++;
printf("请再按一次\r\n");
ensure = PS_GetImage();
if(ensure == 0x00)
{
ensure = PS_GenChar(CharBuffer2); //生成特征
if(ensure == 0x00)
{
printf("指纹正常\r\n");
i = 0;
processnum = 2; //跳到第三步
}
else ShowErrMessage(ensure);
}
else ShowErrMessage(ensure);
break;
case 2:
printf("对比两次指纹\r\n");
ensure = PS_Match();
if(ensure == 0x00)
{
printf("对比成功\r\n");
processnum = 3; //跳到第四步
}
else
{
printf("对比失败\r\n");
ShowErrMessage(ensure);
i = 0;
processnum = 0; //跳回第一步
}
delay_ms(500);
break;
case 3:
printf("生成指纹模板\r\n");
delay_ms(500);
ensure = PS_RegModel();
if(ensure == 0x00)
{
printf("生成指纹模板成功\r\n");
processnum = 4; //跳到第五步
}
else
{
processnum = 0;
ShowErrMessage(ensure);
}
delay_ms(1000);
break;
case 4:
printf("默认选择ID为1 \r\n");
ID_NUM = 1;
#if 0
while(key_num != 3)
{
key_num = KEY_Scan(0);
if(key_num == 2)
{
key_num = 0;
if(ID_NUM > 0)
ID_NUM--;
}
if(key_num == 4)
{
key_num = 0;
if(ID_NUM < 99)
ID_NUM++;
}
OLED_ShowCH(40, 6, "ID=");
OLED_ShowNum(65, 6, ID_NUM, 2, 1);
}
key_num = 0;
#endif
ensure = PS_StoreChar(CharBuffer2, ID_NUM); //储存模板
if(ensure == 0x00)
{
printf("录入指纹成功\r\n");
delay_ms(1500);
return ;
}
else
{
processnum = 0;
ShowErrMessage(ensure);
}
break;
}
delay_ms(400);
if(i == 10) //超过5次没有按手指则退出
{
break;
}
}
}
录入两次,成功之后再添加刷指纹的函数:
//刷指纹
void press_FR(void)
{
SearchResult seach;
uint8_t ensure;
char str[20];
while(1)
{
//key_num = KEY_Scan(0);
ensure = PS_GetImage();
if(ensure == 0x00) //获取图像成功
{
ensure = PS_GenChar(CharBuffer1);
if(ensure == 0x00) //生成特征成功
{
ensure = PS_HighSpeedSearch(CharBuffer1, 0, 99, &seach);
if(ensure == 0x00) //搜索成功
{
OLED_Clear();//先清屏
OLED_ShowCHinese(0,0,18);//指
OLED_ShowCHinese(20,0,19);//纹
OLED_ShowCHinese(40,0,10);//正
OLED_ShowCHinese(60,0,11);//确
OLED_ShowChar(80,0,'!',16);//!
OLED_ShowCHinese(0,3,0); //门
OLED_ShowCHinese(20,3,1);//已
OLED_ShowCHinese(40,3,4);//打
OLED_ShowCHinese(60,3,5);//开
OLED_ShowChar(80,3,'!',16);//!
printf("指纹验证成功");
sprintf(str, " ID:%d 得分:%d ", seach.pageID, seach.mathscore);
printf("%s\r\n",str);
delay_ms(1500);
delay_ms(1500);
}
else
{
OLED_Clear();//先清屏
OLED_ShowCHinese(0,0,18);//指
OLED_ShowCHinese(20,0,19);//纹
OLED_ShowCHinese(40,0,8);//错
OLED_ShowCHinese(60,0,9);//误
OLED_ShowChar(80,0,'!',16);//!
OLED_ShowCHinese(0,3,12); //请
OLED_ShowCHinese(20,3,15);//重
OLED_ShowCHinese(40,3,16);//新
OLED_ShowCHinese(60,3,13);//输
OLED_ShowCHinese(80,3,14);//入
OLED_ShowChar(100,3,'!',16);//!
printf("验证失败\r\n");
delay_ms(1500);
}
}
else
{printf ("生成特征失败\r\n");};
printf("请按手指\r\n");
}else {
// printf ("获取图像失败\r\n");
}
}
}
就好了。
附上前面部分代码:
(9条消息) STM32智能门锁学习二,RFID刷卡解锁_泡菜鱼111的博客-CSDN博客
=================================================================