liujie14565 发表于 2013-9-17 21:14:58

strongpig123 发表于 2013-9-17 21:22:34

对帧头和帧尾都不做处理的吗?

wkman 发表于 2013-9-17 21:25:17

好好约定协议,建议参考工业标准: modbus

lzlym182 发表于 2013-9-17 21:29:11

参考NEMA0183协议就可以,以'$'字符为一帧开头,'\r'或‘\n’为结尾

liujie14565 发表于 2013-9-17 21:32:28

liujie14565 发表于 2013-9-17 21:32:53

liujie14565 发表于 2013-9-17 21:33:31

lzlym182 发表于 2013-9-17 21:35:42

那就参考modbus吧,用定时器判断数据接收结束

proteldxp 发表于 2013-9-17 22:24:33

本帖最后由 proteldxp 于 2013-9-17 22:27 编辑

约定一个数据格式:帧起始位+数据长度+数据包+结束位,必要时可以加上校验位。

liujie14565 发表于 2013-9-17 22:51:49

stevenli 发表于 2013-9-17 22:56:05

liujie14565 发表于 2013-9-17 22:51 static/image/common/back.gif
亲   假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕

超时20MS,,

liujie14565 发表于 2013-9-17 23:00:47

yiminglei 发表于 2013-9-18 00:51:03

1.STM32有个串口空闲中断,能检测是否连续发过来。
2,硬件定时器,空闲3个包就是超时。
3.软件计算,数据最后需要有结束符号,或者固定协议,modbus等。

没想到了。。。

lcw_swust 发表于 2013-9-18 09:12:11

状态机
http://wuqidongxing.blog.163.com/blog/static/18434950200791910512879/

mbass51 发表于 2013-9-18 09:29:21

應該不太難,接收後一定時間內,沒數據回來就是完了

mbass51 发表于 2013-9-18 09:30:48

但是要我寫好,可能也要數天呢

vtte 发表于 2013-9-18 09:37:13

没有帧尾就加上帧尾,加不上就加帧头,帧头报告长度,收满长度收工。

shijianzhou 发表于 2013-9-18 09:43:58

定时器就那么紧缺?感觉用定时器挺好的啊。

asj1989 发表于 2013-9-18 09:52:18

vtte 发表于 2013-9-18 09:37 static/image/common/back.gif
没有帧尾就加上帧尾,加不上就加帧头,帧头报告长度,收满长度收工。

+10086   

mbass51 发表于 2013-9-18 16:23:10

vtte 发表于 2013-9-18 09:37 static/image/common/back.gif
没有帧尾就加上帧尾,加不上就加帧头,帧头报告长度,收满长度收工。

用dwin的gdus就是這樣了{:smile:}

szmini2006 发表于 2013-9-18 17:13:36

没有帧头帧尾,又没有长度信息,那除了字符间隔还能有啥办法

gycsy963 发表于 2013-9-18 17:30:29

如果对发送方无法做限制:

用一个定时器做接收超时, 这种效果最好.
如果定时器实在挪不出来. 在无线循环与接收中断中使用状态机机制.

liujie14565 发表于 2013-9-18 17:54:20

气球 发表于 2013-9-18 18:05:36

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

gycsy963 发表于 2013-9-18 19:21:36

unsigned int i;
void main(void)
{
    .........


    i = 0;
    while(1)
    {
      if(i)
      {
            i++;
         if(i > (根据循环工作量取得一个常量经验值))
            {
                  // 认为接收到一帧, 对接收到的数据帧进行处理;
                  // 未防止接收数据丢失, 开启两个接收缓冲区, 关中断, 处理数据前切换接收缓冲区,将 i 赋值为0等安全操作..... 重新开中断.
            }
      }
    }
}


void uartisr(void) interrupt 4
{
      if(RI)
      {
            RI = 0;

            // 将接收到的数据放入缓冲
             ........

            i = 1;
      }
}

proteldxp 发表于 2013-9-18 21:03:11

liujie14565 发表于 2013-9-17 22:51 static/image/common/back.gif
亲   假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕

有数据长度啊,判断长度到了就说明接收完了。

log1009855496 发表于 2013-9-23 13:37:35

没有帧头,帧尾又没有数据长度,你的这套通信协议是有多随便啊, 怎么保证数据的准确性嘞。

strongc 发表于 2013-9-23 14:23:32

串口如果没有明确的帧定义,那就悲剧了

windboy 发表于 2013-9-23 14:48:39

定这个协议的人脑袋可能有问题,他是定来让人看的,不是让计算机解析的

要不,你发些接收到的数据来,咱们帮你分析分析

liujie14565 发表于 2013-9-23 15:33:08

strongc 发表于 2013-9-23 16:06:34

liujie14565 发表于 2013-9-23 15:33 static/image/common/back.gif
就是 GSM 模块 返回 的 信息,不同的 操作 返回的数据 长度 不一致

你是说用PDU通讯吗?
如果是,你查查PDU解析吧

windboy 发表于 2013-9-23 16:31:34

liujie14565 发表于 2013-9-23 15:33 static/image/common/back.gif
就是 GSM 模块 返回 的 信息,不同的 操作 返回的数据 长度 不一致

GSM?
你即然是串口,想必指的是AT指令吧?
所有AT指令都是以 \r\n 结尾的

怎么没有结束符呢、?

gallle 发表于 2013-9-23 16:54:45

windboy 发表于 2013-9-23 16:31 static/image/common/back.gif
GSM?
你即然是串口,想必指的是AT指令吧?
所有AT指令都是以 \r\n 结尾的


+86 10086正解

kebaojun305 发表于 2013-9-23 17:08:50

超时为啥要单独站个硬件定时器软件可以做啊。

tragedy 发表于 2013-9-23 17:48:26

额,定时器可以吧
页: [1]
查看完整版本: 求思路,串口接收不固定数据长度包,可以怎么处理