不知道有没有哪位朋友遇到过从上位机发送超过64个字符的字符串到下位机,下位机将接受到的字符串存入缓存,然后原样输出,在缓存超过64个字符后出现有错误情况如以下帖子一样。 链接:https://www.stmcu.org.cn/module/ ... p;page=1#pid2143334 哪位能找到好的办法解决,能否指点一下我,希望大伙能顶起这个帖子,因为该试的我都试了,还是解决不了。 1.个人觉得STM32下位机接收到的字符串是不是不能超过64个; 2.是不是STM32的串口驱动程序有可以修改的限制发送与接收的字符长度,是我没有找到? |
3.5的。。。。。。。。。。。。。。。。。
比如。。。。。。。。。。。。。。。。。。?
这是中断部分的。缓存我定义了200个
#define Buf1_Max 120 //串口1缓存长度
char Uart1_Buf[120];
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;
}
}
如何查看有无溢出情况?在KEILL里边看?给个指点
问题已经解决了。。。
犯了一个最低级的错误,就是在串口中断里边不应该再放入判断的语句,因为在你还没判断完成时下一个中断就到来了,使接收的数据出错。
问题已经解决了。。。
犯了一个最低级的错误,就是在串口中断里边不应该再放入判断的语句,因为在你还没判断完成时下一个中断就到来了,使接收的数据出错。