打印

STM32本身BUG--多机串口通信大包问题?

[复制链接]
5867|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyboy|  楼主 | 2012-7-11 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zyboy 于 2012-7-11 14:09 编辑

我发现9位数据的多机通信时,当传输数据较大(例如500多个字节的大包),通信数据会出现少收,或错收的问题,但如果用8位的方式,则没有这个问题,测试发现,特别是当包>=180问题很明显,我程序是宏定义切换8位/9位。

这会不是是STM32的本身BUG?
沙发
figo20042005| | 2012-7-11 14:10 | 只看该作者
这个应该不会是STM32本身的BUG,再找找程序上有没有需要注意的

使用特权

评论回复
板凳
zyboy|  楼主 | 2012-7-11 14:30 | 只看该作者
没有吧。。。程序超级简单。。9位地址方式不是完全不通,是数据大了出问题
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
      
                          ushTemp = USART_ReceiveData(USART1);
                       
                          #ifdef UART1_CMMUNT_MODE_MULTI                  
         if((ushTemp&0x100) != 0)//串口第一个数据发送到数据信息
         {

         }
                                 else
                                 {
                                          Uart1_Buffer_Rx[Uart1_Precv] = (ushTemp&0xff);
                        Uart1_Precv++;
                        if(Uart1_Precv >= MAX_UART1RECV)
                        {
                            Uart1_Precv =0;
                        }         
                                 }
               
                          #else
                          Uart1_Buffer_Rx[Uart1_Precv] = USART_ReceiveData(USART1);
        Uart1_Precv++;
        if(Uart1_Precv >= MAX_UART1RECV)
        {
            Uart1_Precv =0;
        }
                                #endif
    }

使用特权

评论回复
地板
IJK| | 2012-7-11 16:04 | 只看该作者
STM32本身BUG的可能性小。

1.如果有条件,用数字示波器来监测收发的数据。
2.STM32有多个串口,用它剩余的串口来监测收发的数据。

使用特权

评论回复
5
zyboy|  楼主 | 2012-7-11 16:18 | 只看该作者
用示波器看过,波形没什么问题。我是写了最DEBUG调试,发现收的数据没收全。不知道有没有人真实用过(不是简单测试)9位地址方式? 硬件肯定没问题,8位是好的。

另外主串口,我用PC机试过作为主(PC模拟9位,即上位机控制校验位mark,space的切换),用其他CPU(该CPU也硬件支持9位地址)作为主,STM32作为从。结果无论什么哪种作为主,STM32接收都有问题

使用特权

评论回复
6
airwill| | 2012-7-11 19:45 | 只看该作者
在判断这个错误前, 最好先确认其他原因. 比如波特率偏差, 噪声的影响和容限等.

使用特权

评论回复
7
zyboy|  楼主 | 2012-7-11 21:51 | 只看该作者
说过了8位通信是可以的,波形也看过没什么问题。。。不应该是硬件原因了,我只想问有谁真正用过STM32的9位这种方式在实际产品中

使用特权

评论回复
8
fish1983| | 2013-4-21 10:53 | 只看该作者
我也遇到了这个问题,楼主解决了没啊?谢谢!!

使用特权

评论回复
9
拿起书本| | 2013-4-21 16:15 | 只看该作者
没有在实际产品中用过STM32的9位这种方式,替楼主顶一下,希望早日解决问题,记得分享,让大家一起学习一下。

使用特权

评论回复
10
STARM| | 2013-4-21 16:42 | 只看该作者
能上传代码参考一下吗 ?

使用特权

评论回复
11
STARM| | 2013-4-21 16:44 | 只看该作者
本帖最后由 STARM 于 2013-4-21 16:46 编辑


if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{

  ushTemp = USART_ReceiveData(USART1);

#ifdef UART1_CMMUNT_MODE_MULTI                  
  if((ushTemp&0x100) != 0) //串口第一个数据发送到数据信息
  {

  }
  else
  {
    Uart1_Buffer_Rx[Uart1_Precv] = (ushTemp&0xff);
    Uart1_Precv++;
    if(Uart1_Precv >= MAX_UART1RECV)
    {
      Uart1_Precv =0;
    }
  }

#else
  Uart1_Buffer_Rx[Uart1_Precv] = USART_ReceiveData(USART1);
  Uart1_Precv++;
  if(Uart1_Precv >= MAX_UART1RECV)
  {
    Uart1_Precv =0;
  }
#endif
}



USART_ReceiveData(USART1); 读取两次会出现问题吗 ?




使用特权

评论回复
12
hawksabre| | 2013-4-21 19:09 | 只看该作者
个人觉得应该不是单片机本身的bug   应该还是楼主代码的问题   仔细把代码查一查   单步调试  看看   问题应该就能出来了

使用特权

评论回复
13
jt4117| | 2013-4-21 22:27 | 只看该作者
楼主如何知道数据错误,是产品互联时发现,还是用串口调试助手。在PC上发现有问题。
如果是在PC上发现数据错误,有可能是你的串口调试助手本身的问题。

使用特权

评论回复
14
xhdzwzj| | 2013-5-27 17:57 | 只看该作者
mark

使用特权

评论回复
15
smartmcu| | 2013-5-27 20:35 | 只看该作者
是什么错误?整个字节的错,还是错位?

使用特权

评论回复
16
grasswolfs| | 2013-5-28 10:45 | 只看该作者
应该不是单片机的bug,最好还是用数字示波器或者逻辑分析仪看一下,感觉可能是内部时序或者设置的问题

使用特权

评论回复
17
zhangnaizhou| | 2016-9-12 08:30 | 只看该作者
9位数据好像频率有问题像我用的19200没(不是每次都能把数据传上来)后来改为19700就可以每次不丢数。

使用特权

评论回复
18
l8j8h8| | 2017-4-10 15:57 | 只看该作者
                USART_InitStructure.USART_WordLength = USART_WordLength_9b;
                USART_InitStructure.USART_Parity = USART_Parity_Even;
窜口这样通信 , 最长180bytes 带校验, 我用了很久了 , 没有问题

使用特权

评论回复
19
xiaoyaodz| | 2017-4-10 21:50 | 只看该作者
用的是什么通信方式?

使用特权

评论回复
20
xiaoyaodz| | 2017-4-10 21:52 | 只看该作者
通信节点可能有问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:学海无涯,回头是岸!

101

主题

356

帖子

0

粉丝