新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2019-9-12
- 在线时间
- 3 小时
|
写一个串口通信接收发送的程序,用的是原子哥的例程,发现调试时候遇到了一个问题,怎么也想不到 求大神指导;
串口接收库函数:
void USART3_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//½óêÕμ½êy¾Y
{
res =USART_ReceiveData(USART3);//;¶á衽óêÕμ½μÄêy¾YUSART2->DR
// USART_SendData(USART3,res);
if(Bluetooth_RX_CNT<64)
{
Bluetooth_RX_BUF[Bluetooth_RX_CNT]=res; //¼Ç¼½óêÕμ½μÄÖμ
Bluetooth_RX_CNT++; //½óêÕêy¾YÔö¼ó1
}
}
}
原子哥写的的一个接收函数:
void Bluetooth_Receive_Data(u8 *buf,u8 *len)
{
u8 rxlen=Bluetooth_RX_CNT;
u8 i=0;
*len=0; //ĬèÏÎa0
delay_ms(1); //
if(rxlen==Bluetooth_RX_CNT&&rxlen)//
{
for(i=0;i<rxlen;i++)
{
buf[i]=Bluetooth_RX_BUF[i];
}
*len=Bluetooth_RX_CNT; //¼Ç¼±¾′Îêy¾Y3¤¶è
Bluetooth_RX_CNT=0; //Çåáã
}
}
这两个函数都没问题,但是在主函数中处理方式不同会出现bug,程序目标是接收到0x01 0x02 LED0亮,,接收到0x02,0x03 LED1亮
假如在主函数中:
while(1)
{
Bluetooth_Receive_Data(databuf,&number)
if(number!=0)
{
if(databuf[0]==0x01&&databuf[1]==0x02)
{ LED0=1; }
if(databuf[0]==0x02&&databuf[1]==0x03)
{ LED1=1; }
}
}
其中number是接收到数据,也就是接收不为0,假如我不做判断:输入0x01,0x02 LED0亮,再输入0x02,0x03 LED1不亮,这是为什么呢,理论上再次发送0x02,0x03时,接收缓冲区的数据会变啊,,怎么一直没有变呢。
while(1)
{
Bluetooth_Receive_Data(databuf,&number)
if(databuf[0]==0x01&&databuf[1]==0x02)
{ LED0=1; }
if(databuf[0]==0x02&&databuf[1]==0x03)
{ LED1=1; }
}
求大神指教!!
|
|