通过串口助手发送一串很长的数据如下上传的图所示,然后下位机原样返回串口助手发送的数据,当发送的字符串超过62个左右时,返回接收的数据在固定位置出现异常,如下图所示。发送的数据不超过62个时,发送的数据与返回数据没有异常, 1.串口中断接收的程序: void USART1_IRQHandler(void) { char Res1=0; //(USART_GetFlagStatus) if(USART_GetFlagStatus(USART1, USART_FLAG_ORE ) ==SET)//数据过载错误 。USART_IT_ORE USART_GetFlagStatus { USART_ClearFlag(USART1, USART_FLAG_ORE ); USART_ReceiveData(USART1); // Res1 =USART_ReceiveData(USART1); // Uart1_Buf[First_Int1] = Res1; //将接收到的字符串存到缓存中 // First_Int1++; } if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志 Res1 =USART_ReceiveData(USART1); Uart1_Buf[First_Int1] = Res1; //将接收到的字符串存到缓存中 First_Int1++; //缓存指针向后移动 } if(First_Int1 > Buf1_Max ) //如果缓存满,将缓存指针指向缓存的首地址 { First_Int1 = 0; } } 2.接收到上位机数据后原样输出的程序: if(Find1("901A905300")) //901A905300检查电话卡属于哪个网络 { UART1_SendString(Uart1_Buf); } ************************************************************************************************** *************************************************************************************************** 希望版主能帮忙看看。。这问题困扰了我两个多星期,希望大伙能顶起。。 |
红è²æ¡æ¡ä½å¼å¸¸çä½ç½®
换个串口软件试试
我这有个,你试试看。。。
怎么在Windos系统中的串口设备,设置Buffer长度啊?
你给的那个串口软件很好用,功能更及全,但是还是出现一样的问题哦。。不知如何是好,总感觉是在缓存出现问题,但不知道怎么解决。。
这个我试过,但是没用还是在固定位置出现错误,在第63个字符的位置出现异常,(字符超过63个字符时就出现错误了)
正确接收程序:
void USART1_IRQHandler(void)
{
char Res1=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
Res1 =USART_ReceiveData(USART1);//缓存指针向后移动
USART_SendData(USART1, Res1);
while (!(USART1->SR & USART_FLAG_TXE));
}
}