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

STM32 串口通信 发送字符串超过64个字符 出现故障

[复制链接]
奇迹的2011 提问时间:2015-12-9 23:12 /
不知道有没有哪位朋友遇到过从上位机发送超过64个字符的字符串到下位机,下位机将接受到的字符串存入缓存,然后原样输出,在缓存超过64个字符后出现有错误情况如以下帖子一样。
链接:https://www.stmcu.org.cn/module/ ... p;page=1#pid2143334

哪位能找到好的办法解决,能否指点一下我,希望大伙能顶起这个帖子,因为该试的我都试了,还是解决不了。

1.个人觉得STM32下位机接收到的字符串是不是不能超过64个;
2.是不是STM32的串口驱动程序有可以修改的限制发送与接收的字符长度,是我没有找到?
收藏 1 评论15 发布时间:2015-12-9 23:12

举报

15个回答
回答时间:2015-12-10 09:19:33
用的是那个库?要注意发送的缓冲区。
disheng4688 回答时间:2015-12-10 09:42:28
帮顶。                                    
奇迹的2011 回答时间:2015-12-10 11:29:31
安 发表于 2015-12-10 09:19
用的是那个库?要注意发送的缓冲区。

3.5的。。。。。。。。。。。。。。。。。
奇迹的2011 回答时间:2015-12-10 11:29:57
安 发表于 2015-12-10 09:19
用的是那个库?要注意发送的缓冲区。

比如。。。。。。。。。。。。。。。。。。?
回答时间:2015-12-10 14:07:54
接收中断里面看看,缓冲区的大小是多少。
dsjsjf 回答时间:2015-12-10 19:20:30
帮顶         
奇迹的2011 回答时间:2015-12-10 21:56:47
安 发表于 2015-12-10 14:07
接收中断里面看看,缓冲区的大小是多少。

这是中断部分的。缓存我定义了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;
                }   
                 
}
zhangdaijin 回答时间:2015-12-11 08:54:11
回答时间:2015-12-11 15:24:23
看代码没有问题,这样对比一下发送和接收的数据,还有查看一下是否发生过溢出。
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版