amobbs.com 阿莫电子技术论坛

标题: 求思路,串口接收不固定数据长度包,可以怎么处理 [打印本页]

作者: liujie14565    时间: 2013-9-17 21:14
标题: 求思路,串口接收不固定数据长度包,可以怎么处理
本帖最后由 liujie14565 于 2013-9-17 21:16 编辑

数据包要等完全接收完了 进行处理
查阅网上资料有实现的方法就是用定时器来判断数据间隔来实现,但这种方法却占用了一个硬件定时器.....
特来询问还有什么好方法实现吗??? 当然MCU 无DMA ...

作者: strongpig123    时间: 2013-9-17 21:22
对帧头和帧尾都不做处理的吗?
作者: wkman    时间: 2013-9-17 21:25
好好约定协议,建议参考工业标准: modbus

作者: lzlym182    时间: 2013-9-17 21:29
参考NEMA0183协议就可以,以'$'字符为一帧开头,'\r'或‘\n’为结尾
作者: liujie14565    时间: 2013-9-17 21:32
lzlym182 发表于 2013-9-17 21:29
参考NEMA0183协议就可以,以'$'字符为一帧开头,'\r'或‘\n’为结尾

不好意思 忘记说了  假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕
作者: liujie14565    时间: 2013-9-17 21:32
strongpig123 发表于 2013-9-17 21:22
对帧头和帧尾都不做处理的吗?

不好意思 忘记说了  假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕
作者: liujie14565    时间: 2013-9-17 21:33
wkman 发表于 2013-9-17 21:25
好好约定协议,建议参考工业标准: modbus

不好意思 忘记说了  假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕
作者: lzlym182    时间: 2013-9-17 21:35
那就参考modbus吧,用定时器判断数据接收结束
作者: proteldxp    时间: 2013-9-17 22:24
本帖最后由 proteldxp 于 2013-9-17 22:27 编辑

约定一个数据格式:帧起始位+数据长度+数据包+结束位,必要时可以加上校验位。
作者: liujie14565    时间: 2013-9-17 22:51
proteldxp 发表于 2013-9-17 22:24
约定一个数据格式:帧起始位+数据长度+数据包+结束位,必要时可以加上校验位。 ...

亲   假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕
作者: stevenli    时间: 2013-9-17 22:56
liujie14565 发表于 2013-9-17 22:51
亲   假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕

超时20MS,,
作者: liujie14565    时间: 2013-9-17 23:00
stevenli 发表于 2013-9-17 22:56
超时20MS,,

怎么定  超时   在 不 额外 使用 硬件 定时器 的 情况下  
作者: yiminglei    时间: 2013-9-18 00:51
1.STM32有个串口空闲中断,能检测是否连续发过来。
2,硬件定时器,空闲3个包就是超时。
3.软件计算,数据最后需要有结束符号,或者固定协议,modbus等。

没想到了。。。
作者: lcw_swust    时间: 2013-9-18 09:12
状态机
http://wuqidongxing.blog.163.com ... 950200791910512879/
作者: mbass51    时间: 2013-9-18 09:29
應該不太難,接收後一定時間內,沒數據回來就是完了
作者: mbass51    时间: 2013-9-18 09:30
但是要我寫好,可能也要數天呢
作者: vtte    时间: 2013-9-18 09:37
没有帧尾就加上帧尾,加不上就加帧头,帧头报告长度,收满长度收工。
作者: shijianzhou    时间: 2013-9-18 09:43
定时器就那么紧缺?感觉用定时器挺好的啊。
作者: asj1989    时间: 2013-9-18 09:52
vtte 发表于 2013-9-18 09:37
没有帧尾就加上帧尾,加不上就加帧头,帧头报告长度,收满长度收工。

+10086     
作者: mbass51    时间: 2013-9-18 16:23
vtte 发表于 2013-9-18 09:37
没有帧尾就加上帧尾,加不上就加帧头,帧头报告长度,收满长度收工。

用dwin的gdus就是這樣了
作者: szmini2006    时间: 2013-9-18 17:13
没有帧头帧尾,又没有长度信息,那除了字符间隔还能有啥办法
作者: gycsy963    时间: 2013-9-18 17:30
如果对发送方无法做限制:

用一个定时器做接收超时, 这种效果最好.
如果定时器实在挪不出来. 在无线循环与接收中断中使用状态机机制.
作者: liujie14565    时间: 2013-9-18 17:54
gycsy963 发表于 2013-9-18 17:30
如果对发送方无法做限制:

用一个定时器做接收超时, 这种效果最好.

哦   如果定时器实在挪不出来. 在无线循环与接收中断中使用状态机机制.   还望指点一二
作者: 气球    时间: 2013-9-18 18:05

作者: gycsy963    时间: 2013-9-18 19:21
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
liujie14565 发表于 2013-9-17 22:51
亲   假如 数据包 没有 定义   帧尾 的 状态下    可以怎么判断接收完毕

有数据长度啊,判断长度到了就说明接收完了。
作者: log1009855496    时间: 2013-9-23 13:37
没有帧头,帧尾又没有数据长度,你的这套通信协议是有多随便啊, 怎么保证数据的准确性嘞。
作者: strongc    时间: 2013-9-23 14:23
串口如果没有明确的帧定义,那就悲剧了
作者: windboy    时间: 2013-9-23 14:48
定这个协议的人脑袋可能有问题,他是定来让人看的,不是让计算机解析的

要不,你发些接收到的数据来,咱们帮你分析分析
作者: liujie14565    时间: 2013-9-23 15:33
windboy 发表于 2013-9-23 14:48
定这个协议的人脑袋可能有问题,他是定来让人看的,不是让计算机解析的

要不,你发些接收到的数据来,咱们 ...

就是 GSM 模块 返回 的 信息  ,  不同的 操作 返回的  数据 长度 不一致
作者: strongc    时间: 2013-9-23 16:06
liujie14565 发表于 2013-9-23 15:33
就是 GSM 模块 返回 的 信息  ,  不同的 操作 返回的  数据 长度 不一致

你是说用PDU通讯吗?
如果是,你查查PDU解析吧
作者: windboy    时间: 2013-9-23 16:31
liujie14565 发表于 2013-9-23 15:33
就是 GSM 模块 返回 的 信息  ,  不同的 操作 返回的  数据 长度 不一致

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

怎么没有结束符呢、?
作者: gallle    时间: 2013-9-23 16:54
windboy 发表于 2013-9-23 16:31
GSM?
你即然是串口,想必指的是AT指令吧?
所有AT指令都是以 \r\n 结尾的

+86 10086正解
作者: kebaojun305    时间: 2013-9-23 17:08
超时为啥要单独站个硬件定时器  软件可以做啊。
作者: tragedy    时间: 2013-9-23 17:48
额,定时器可以吧




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4