5439|7

316

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

关于串口通信中的数据结构传递! [复制链接]

考虑一个问题呵!
就是说我想从MSP430里面传送一个Struct数据到PC或别的芯片,这个方式应该怎么组织呢!

因为MSP430 是一个字节一个字的传的,一般来说是先分一个临时的数组,然后往数组里填数据,然后再整个数据的操作,
但是这个过程中怎么去处理一组数据的开始和结尾呢!比如说我把所有的数据都一直往数组里放,那就一锅粥了,怎么去定义一个开始和结尾!?

大家有什么方案说出来一块讨论一下!?说不定哪天就用到了!

最新回复

如果是串口通信的话,规定好相关的通信协议,规定好帧长,把数据一帧一帧的发送和接收。检测到帧头就开始读数据  详情 回复 发表于 2012-1-4 21:58
 
点赞 关注

回复
举报

4

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

一点拙见

数据结构是针对C语言的,C语言没有处理串口的专用编译方法。所以我想只能自己写程序处理数据结构的串口输出,比如用指针把结构中的数据逐项送给串口。接受端接收后,再恢复成原数据结构。
 
 

回复

5015

帖子

13

TA的资源

裸片初长成(初级)

板凳
 
规定好帧格式
如果是定长的帧就很好办,比如两个字节,你收到了两个字节就可以认为是收到了一个完整的帧;要是觉得这样可靠性太低,可以设置帧头和帧尾,来判断帧。比如这样的格式{0x55,……,0xaa}
 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

4
 

原帖由 wstt 于 2012-1-4 09:35 发表 规定好帧格式如果是定长的帧就很好办,比如两个字节,你收到了两个字节就可以认为是收到了一个完整的帧;要是觉得这样可靠性太低,可以设置帧头和帧尾,来判断帧。比如这样的格式{0x55,……,0xaa}

 

同意,再加上进行校验和吧。可以参考一下GA/T508-2004:

https://bbs.eeworld.com.cn/viewthread.php?tid=309162&page=1&fromuid=194149#pid1213391

 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

5
 
你的问题其实就是如何定义一个完整合理的数据帧格式,我讲下我们一般用的格式供你参考。
1. 除非对数据帧长度有限制,一般会使用0X55或者0XAA作为同步字,可以是一字节也可以是2个字节。这个同步字在一般情况下用处不是很大,接收方可以通过该同步字来划分收到的各个数据帧段。但在有的情况下,该同步字就比较有意义了。比如,对方是自适应波特率的应用,加上这个同步字就能很方便地实现自适应波特率的功能。
2. 我们在同步字后跟一个字节的帧头,用来判断帧的起始地址,
3. 除非是固定帧长的应用,我们会在帧的起始位置加一个帧长度,这个也是根据你的应用来确定是用一个字节还是2个字节.
4. 接下来是有效数据帧,根据实际情况确定。
5. 数据帧后,我们一般会跟1-2个字节的校验字,可以是校验和,也可以是CRC。根据你的应用确定。
5. 校验字之后,会有一个字节的帧结束标志。

赞赏

1

查看全部赞赏

 
 
 

回复

188

帖子

0

TA的资源

纯净的硅(中级)

6
 

回复 楼主 wuyanyanke 的帖子

先定义好帧的模式,包括帧头,帧尾,数据区,比如0xaa,0xd5  data0 data1 data2...datan  0xbb,这样发送和接收都能够得到有效识别。

赞赏

1

查看全部赞赏

 
 
 

回复

316

帖子

1

TA的资源

纯净的硅(中级)

7
 
谢谢各位,

我现在遇到一个问题,就是不知道为什么从另一个模块里传进来的数据只能读出来8个字节!?
代码如下:

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt

  case 2:                                   // Vector 2 - RXIFG
    RxLen++;
    RxBuffer[RX_IndexW] =UCA1RXBUF;
    if(++RX_IndexW > 128)
    {
      RX_IndexW = 0;
    }
    break;
  case 4:                                   // Vector 4 - TXIFG
    break;
  default: break;
  }
}

求解!?
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

8
 
如果是串口通信的话,规定好相关的通信协议,规定好帧长,把数据一帧一帧的发送和接收。检测到帧头就开始读数据
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表