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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版