打印

232串口协议解析

[复制链接]
3762|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ic_ic|  楼主 | 2008-3-1 17:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在使用AVR单片机做一个串口的产品,主要做协议解析,通信协议大概有10条,组成为:包头(2个字节)+命令(2-5个字节)+数据(1-16个字节)+包尾(2个字节)
最小的包7个字节,最大包25字节,通信波特率38400,
现在初步设想的解析方法为:串口中断中执行(解析包头+解析包尾),收到一个完整的包后置标志位,主程序中在判断具体的包中的命令和数据,不知这样是否合理,大虾指点!!  
如果整个包的解析否放在中断中,中断服务程序可能过大,我怕中断时间过长,处理不过来。。。。

相关帖子

沙发
chunyang| | 2008-3-1 17:26 | 只看该作者

中断仅处理缓冲存储即可

其它的要看通讯包的结构如是否定长(包括自带包长度信息),是否有保留的包头、包尾特征字符等等,中断程序不宜过长,问题不是是否能处理过来,而是程序结构的规范性问题。

使用特权

评论回复
板凳
ic_ic|  楼主 | 2008-3-1 17:37 | 只看该作者

谢谢chunyang的回复

我的数据包结构是这样的:
(1)包头:2字节引导符(特定字符),无实际意义。
(2)命令:2-5字节,不同命令后面跟的数据字节长度不同,意义也不同。
(3)数据字节:1-16字节,根据命令字节,长度不同。
(4)包尾:2字节结束符(特定字符),无实际意义。
现在是单片机同时控制三路串口,分别连接GSM、GPS、另一模块A,主要的通信是单片机和模块A的。
我的初步想法是中断解析包头包尾引导字符,主程序解析具体的命令和数据,以前做过一个比较简单的串口协议,我所有的解析都放在中断中了,没有什么问题,现在协议比较复杂,所以不敢全放中断中了。。。

使用特权

评论回复
地板
garnekuan| | 2008-3-9 14:14 | 只看该作者

AVR中断

以前用AVRMEGA128做通信部分,出现很大问题,如果是两个MEGA128之间通信,没有问题,如果是单片机与DSP或者FPGA通信,要么是数据过不去,要么是出现丢数据的情况,后来也是用串口中断,在中断里面加上数据回发,速度还可以

使用特权

评论回复
5
chunyang| | 2008-3-9 15:21 | 只看该作者

楼上遇到的问题是波特率误差过大所致

使用特权

评论回复
6
xxdcq| | 2008-3-11 08:24 | 只看该作者

串口识别

如果不关心协议只需要识别
我们可以提供这样的串口数据识别模块
波特率从300--57600
串口数据包最大字节数可以到20字节
www.yofeng.com

使用特权

评论回复
7
mohanwei| | 2008-3-11 19:07 | 只看该作者

协议解析还是在上位机做比较好。一片MAX232就能把数据

抓取下来了,怎么折腾都没问题。

使用特权

评论回复
8
杨工| | 2008-3-11 19:52 | 只看该作者

一般中断中不作太多的事情

我想你的协议可以修改一点点。
你说共有大约10条指令,应该1个字节足够了,不应该2-5字节,逻辑判断可能比较复杂。
后面增加一个参数字节数。1字节,可以是0。
最大包25字节,单片机内存应该可以接受。开一个接收缓冲区
中断程序是一个状态机。中断里逻辑判断非常简单。
收到一条完整命令包后设一个标志,等待主循环处理。
发送我一般不用中断。
顺便说一句,我的协议里通信包比较大,我用的是带扩展RAM的单片机,例如STC,把缓冲区放在EXT RAM里。

使用特权

评论回复
9
soso| | 2008-3-15 22:08 | 只看该作者

开一个大于32B接收缓冲,每次中断只在将数据放进缓冲!

数据处理在单独用一个函数完成!主程序调用这个函数!

使用特权

评论回复
10
lhzw2001| | 2008-3-27 00:08 | 只看该作者

支持楼上!

同时,命令码应该要等长

使用特权

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

本版积分规则

5

主题

76

帖子

0

粉丝