搞指纹识别模块遇到的问题! 用串口调试助手发现每次发送出去的数据第一个字节都会丢失,后来研究发现:
1、串口的SR寄存器的复位值就是0x00c0,而我的程序是
/*
功能:串口发送
*/
void Txd_Byte(u8 data)
{
USART1->DR=data;
while((USART1->SR&0X40)==0);
}
我判断的是TC位,就是说要等到数据到移位寄存器中完成后,再发送第二帧数据,但是,由于SR寄存器的复位值是0x00c0,所以首先TC位就是置1的,所以当第一次数据写入DR寄存器中的时候头一个while没起作用,然后第二个数据来了就把第一个数据覆盖了,这样我们经常发现,串口的第一个数据丢失了!
搞懂了为什么,这样解决问题就好办了!
最简单的办法就是直接判断TXE为,即把上面的0x40改成0x80就行;
第二个就是先读SR的TC位,这样第二次判断的时候,就已经清零了,只有等待数据到移位寄存器肿了,第二次数据来的时候就不会覆盖第一次的数据了
其实最好还是判断TXE位,当然,如果在多缓冲器的情况下,还是判断TC位比较好!