你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32上位机通过串口发送大数据返回接收异常

[复制链接]
奇迹的2011 提问时间:2015-12-3 14:31 /
通过串口助手发送一串很长的数据如下上传的图所示,然后下位机原样返回串口助手发送的数据,当发送的字符串超过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);

          }
**************************************************************************************************
***************************************************************************************************
希望版主能帮忙看看。。这问题困扰了我两个多星期,希望大伙能顶起。。

红色框框位异常的位置

红色框框位异常的位置
收藏 2 评论12 发布时间:2015-12-3 14:31

举报

12个回答
wolfgang2015 回答时间:2015-12-3 14:46:22
找到Windos系统中的串口设备,设置Buffer长度.
Paderboy 回答时间:2015-12-3 15:26:31
本帖最后由 Paderboy 于 2015-12-3 15:31 编辑

换个串口软件试试
我这有个,你试试看。。。

单片机多功能调试助手.rar (687.84 KB, 下载次数: 41)
peter001 回答时间:2015-12-3 20:25:33
每个字符回传前加入延时
奇迹的2011 回答时间:2015-12-3 22:20:00
wolfgang2015 发表于 2015-12-3 14:46
找到Windos系统中的串口设备,设置Buffer长度.

怎么在Windos系统中的串口设备,设置Buffer长度啊?
奇迹的2011 回答时间:2015-12-3 22:22:14
Paderboy 发表于 2015-12-3 15:26
换个串口软件试试
我这有个,你试试看。。。

你给的那个串口软件很好用,功能更及全,但是还是出现一样的问题哦。。不知如何是好,总感觉是在缓存出现问题,但不知道怎么解决。。
奇迹的2011 回答时间:2015-12-3 22:24:23
peter001 发表于 2015-12-3 20:25
每个字符回传前加入延时

这个我试过,但是没用还是在固定位置出现错误,在第63个字符的位置出现异常,(字符超过63个字符时就出现错误了)
奇迹的2011 回答时间:2015-12-3 22:57:53
以上问题已经解决,原先是用IFIO的方式接收缓存的数据,不知道其占用很大的存空间和时间,超过一定的存贮量数据时会使接收返回数据出错。
正确接收程序:
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));
                }                 
}
奇迹的2011 回答时间:2015-12-3 22:59:39
解决。。。。。。。。。。。。。。。。。。。。。。。。。
53.jpg
Paderboy 回答时间:2015-12-4 08:25:42
解决就好。。
STMCU-Logo.png
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版