指纹模块的硬件电路设计比较简单,是一个串口通信接口,直接把指纹模块插到单片的USART通信口,看12864屏是否能够检测到模块,如果检测到模块,说明通信正常,接下来,再测试比对指纹,录入指纹,删除指纹,删除所有指纹,如果都可以则调试指纹模块正常。指纹模块是通过USART通信的,有时候杜邦线会因为接触不良,会导致通信不正常,导致检测不到指纹模块的存在,只需要在上电的时候紧紧的按压其与单片机通信的管脚,这样就可以正常通信了。

 

在利用ST-Link进行在线调试的时候,当发送指纹生成特征码存在指纹模块Buffer1的缓存区间的时候,发现返回来的数据出现了错误,确认码是0x02,然而指纹模块技术手册并没有确认码是0x02。反复的查看程序,也没有发现具体那部分出现问题。于是从头再检查一遍,先确认指纹模块是正常的,就使用usb转ttl模块通过串口助手,把电脑当成自己做的板子,去发送一系列的指纹命令看返回的值,发现并没有问题,返回的值都正常。这就说明指纹模块没有问题,发送的命令和指纹模块返回值都是和自己的程序所写的是一样的。这样做证明指纹模块和发送接收的数据都没有问题。接下来要验证的就是自己的串口驱动程序有没有问题,开始的时候是用指定字节数来写的串口驱动,因为发送的命令和接收的数据都是固定字节的。但这样每发一帧串口指令都要说明接收数据的长度,而每接收一帧数据长度都不固定,所以特别的麻烦。后来我改用超时判断的方式来判断是不是两帧数据,这样就解决了每次都要指明接收数据的具体长度的问题了。证明了模块和收发的数据是正常的,接下来就要证明串口驱动程序是可以的,可以让电脑的串口助手模拟指纹模块,让板子去给串口助手发送数据,接收串口助手发回的数据帧,发现还是在指纹图像生成特征码存于指纹模块缓存区Buffer1中出现了问题,串口助手发送的返回帧和在线调试板子接收的返回帧的数据不一样。问题找到了,就是接收串口数据出现了问题。我为了验证我的串口底层驱动没有问题,我又把其底层驱动单独的拿出去调试,发现串口助手发送的数据和单片机接收的数据是一致的。这时我就去找两个底层驱动的差异,发现我在使用完接收的数据没有清空接收数组。

 

但逻辑上思考,又不会出现乱码的现象,因为接收的数据又被下一次接收的数据覆盖了,不会造成乱码的现象,虽然有潜在的风险,可能由于这一帧数据没有完全的覆盖上一帧数据导致误判断。但需要判断的字节是被覆盖的,所以这种潜在的风险又被避免了。于是我尝试着使用完接收数组把其清空,再次去下载到板子上去验证出现问题的那一帧,发现接收正常了。分析了这次遇到的问题,其实在使用完数组之后都是要清空接收的,由于自己编写代码不规范,造成了这个没有必要的,但又难以理解的错误。以后的编写代码的过程中需要细心对待每段代码,分析其中的必要性,因为每一段代码都是有必要的,如果没有必要也就不会添加进去了。

留下评论

咨询