OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4524|回复: 6

串口接受多个字节数据,数据头格式不同,长度也不同,怎么写啊

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-11-7
在线时间
17 小时
发表于 2016-2-2 10:23:52 | 显示全部楼层 |阅读模式
1金钱
串口接受多个字节数据,数据头格式不同,长度也不同,
收到不同的指令要对手动的数据进行处理,但是串口是8位接受的,这样怎么处理?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-2-2 10:25:36 | 显示全部楼层
每种数据设一个数据长度字节,接收到指定长度后 就认为接收完毕
我有故事,你有酒吗
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-11-7
在线时间
17 小时
 楼主| 发表于 2016-2-2 10:32:08 | 显示全部楼层
来俩不甜的 发表于 2016-2-2 10:25
每种数据设一个数据长度字节,接收到指定长度后 就认为接收完毕

每个数据长度是不一样的,
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-2-2 10:49:32 | 显示全部楼层
HPUD 发表于 2016-2-2 10:32
每个数据长度是不一样的,

所以说,假设你第一个字节表示数据长度,那你接收中断里边 接收一次 数据长度+1 直到等于第一个字节值,就认为接收完毕,同时接收计数清零
我有故事,你有酒吗
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-2-2 17:43:09 | 显示全部楼层
补充楼上:使用空闲中断USART_IT_IDLE判定接收结束,再通过接收到的长度判定类型。
还可以定义一个联合体,更方便,比如之前我给NRF24L01定的帧格式
[mw_shl_code=c,true]typedef union//联合体,占用相同内存
{
        u8 packet[TX_PLOAD_WIDTH];//1帧默认32位
        __packed struct
        {
                u8         mode[2];
                u8        addr_dev;        //待接收设备地址(多机通信时使用)
                u8        ack;                        //响应方式0x80:默认方案(),0x08:单帧命令有返回,0x04:单次命令无返回
                u32        length;                //传输总长度
                u8        *fill;//填充至32位
        }frame;
}NRF24L01_HEADER;[/mw_shl_code]
回复

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2016-2-2 17:55:41 | 显示全部楼层
对的,通过空闲中断来判断,然后再判断是否是需要的那个数据帧是不是需要的
回复

使用道具 举报

22

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2015-7-25
在线时间
20 小时
发表于 2016-2-2 19:51:56 | 显示全部楼层
只要结束符一样就行了  预先分配好足够大的接收缓冲
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 08:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表