如题。目前我是将sim800c通信模块和atk-as608指纹识别模块都连接到了mini板上。由于初始代码都是用的P2串口,我就参考论坛里的教程将指纹识别模块改到了P5串口上,使得两个模块通过不同串口来跟mini主板进行通信以及接收指令。在代码方面并没有做太多修改,仅仅是修改了不同阶段下按键所提供的功能(即按键后进入哪一个功能函数)以及ui界面(主要是显示的字幕)。但现在遇到了一个问题,在阶段性验证时,按键进入指纹识别模块的功能后,整个功能会停留在尝试连接AS608模块的阶段下(屏幕显示玩AS608 FINGERPRINT.....一系列字幕后,会不断循环闪现TRY to connect again和Cannot connect with AS608这两行字)而无法进入指纹识别的主要功能阶段。但是单独烧录更改端口后的AS608相关代码,AS608则可以正常工作。详细研读未改动前的AS608代码后认为是没有没有握手成功(倾向于认为as608接收到了来自stm32的信号,但在返回信号时给stm32时出现了问题)。
另外由于两个模块在单独使用时使用的都是通用定时器4,在同时连接到stm32上后,编译时显示了冲突(重复定义),我便把as608模块的timer.h,time.c,uart.c做了修改,将其从使用通用定时器4改为了使用通用定时器5(tim4改为tim5)。
相关部分代码粘贴如下:
..........
while(1)
{
delay_ms(10);
sim_at_response(1);//检查GSM模块发送过来的数据,及时上传给电脑
if(sim_ready)//SIM卡就绪.
{
key=KEY_Scan(0);
if(key)
{
switch(key)
{
case KEY0_PRES:
fingercheck(); //指纹模块
break;
case KEY1_PRES:
sim800c_sms_test(); //短信模块
break;
case 3:
OTP(); //随机数生成
break;
}
gate_seturity_ui(40,30);
timex=0;
}
}
if(timex==0) //2.5秒左右更新一次
{
if(sim800c_gsminfo_show(40,225)==0)sim_ready=1;
else sim_ready=0;
}
if((timex%20)==0)LED0=!LED0;//200ms闪烁
timex++;
}
........
........
u8 fingercheck(void)
{ //这一部分我是直接从AS608实验的主函数部分复制过来了,准备先看看指纹模块功能靠按键来触发后能否正常运行,还未进行修改。
/*u8 key;*/
u8 ensure;
u8 key_num;
char *str;
/*POINT_COLOR=RED;
LCD_Clear(WHITE);
Show_Str_Mid(0,30,"已进入指纹验证模式",16,240);
Show_Str_Mid(0,50,"请将手指放在传感器上",16,240);
Show_Str_Mid(0,70,"按下WK_UP退回上一级菜单",16,240); */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
PS_StaGPIO_Init(); //初始化FR读状态引脚
POINT_COLOR=RED;
/*加载指纹识别实验界面*/
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,0,"AS608 Fingerprint module test",16,240);
Show_Str_Mid(0,20,"Author: @ALIENTEK",16,240);
POINT_COLOR=BLUE;
Show_Str_Mid(0,40,"Connect with AS608....",16,240);
while(PS_HandShake(&AS608Addr))//与AS608模块握手
{
LCD_Fill(0,40,240,80,WHITE);
Show_Str_Mid(0,40,"Cannot connect with AS608!",16,240);
delay_ms(1000);
LCD_Fill(0,40,240,80,WHITE);
Show_Str_Mid(0,40,"Try to connect again....",16,240);
delay_ms(1000);
}
LCD_Fill(0,40,240,320,WHITE);
Show_Str_Mid(0,40,"Connect success!",16,240);//通讯成功
str=mymalloc(30);
sprintf(str,"Baudrate:%d Addr:%x",uart5_baund,AS608Addr);//显示波特率
Show_Str(0,60,240,16,(u8*)str,16,0);
delay_ms(100);
ensure=PS_ValidTempleteNum(&ValidN);//读库指纹个数
if(ensure!=0x00)
ShowErrMessage(ensure);//显示确认码错误信息
ensure=PS_ReadSysPara(&AS608Para); //读AS608模块参数
if(ensure==0x00)
{
mymemset(str,0,50);
sprintf(str,"RemainNum:%d Level:%d",AS608Para.PS_max-ValidN,AS608Para.PS_level);//显示剩余指纹数量和安全等级
Show_Str(0,80,240,16,(u8*)str,16,0);
}
else
ShowErrMessage(ensure);
myfree(str);
AS608_load_keyboard(0,170,(u8**)kbd_menu);//加载虚拟键盘
while(1)
{
key_num=AS608_get_keynum(0,170);
if(key_num)
{
if(key_num==1)Del_FR(); //删指纹
if(key_num==3)Add_FR(); //录指纹
}
if(PS_Sta) //检测PS_Sta状态,如果有手指按下
{
press_FR();//刷指纹
}
}
}
........
int main(void)
{ //这一部分我在研读SIM800C模块和AS608模块的主函数代码后根据自身判断做了一点修改,主要是把二者不重复的函数加了进来。
u8 key,fontok=0;
NVIC_Configuration();
delay_init(); //延时函数初始化
uart_init(115200); //串口初始化为9600
usmart_dev.init(72); //初始化USMART
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
USART2_Init(115200); //初始化串口2
uart5_init(uart5_baund);
tp_dev.init(); //触摸屏初始化
mem_init(); //初始化内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载FLASH.
key=KEY_Scan(0);
if(key==KEY0_PRES) //强制校准
{
LCD_Clear(WHITE); //清屏
tp_dev.adjust(); //屏幕校准
LCD_Clear(WHITE); //清屏
}
fontok=font_init(); //检查字库是否OK
if(fontok||key==KEY1_PRES) //需要更新字库(字库不存在/KEY1按下)
{
LCD_Clear(WHITE); //清屏
POINT_COLOR=RED; //设置字体为红 {MOD}
LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32");
while(SD_Initialize()) //检测SD卡
{
LCD_ShowString(60,70,200,16,16,"SD Card Failed!");
delay_ms(200);
LCD_Fill(60,70,200+60,70+16,WHITE);
delay_ms(200);
}
LCD_ShowString(60,70,200,16,16,"SD Card OK");
LCD_ShowString(60,90,200,16,16,"Font Updating...");
key=update_font(20,110,16); //更新字库
while(key) //更新失败
{
LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
delay_ms(200);
LCD_Fill(20,110,200+20,110+16,WHITE);
delay_ms(200);
}
LCD_ShowString(60,110,200,16,16,"Font Update Success!");
delay_ms(1500);
LCD_Clear(WHITE); //清屏
}
gate_security();
}
由于个人水平有限,实在看不出哪里出错,恳请各位大神前来支个招或找出错误,并致以诚挚的感谢
一周热门 更多>