如何编写自己的串口通讯协议

 我来答
lycdl
高粉答主

2017-09-19 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4891万
展开全部
所谓的串口通信协议,其实,就是串口通信时,相互的一种联系方式。
至于内容完全可以根据自己的需要来制定。
包括:首先确定波特率,是否有奇偶校验,一般都不用,比较麻烦,但可以加一个字节的校验和或校验字。
其次,多机通信时,要确定每个机器的地址,双机通信就不用了。
然后是联系方式,即通信时,是否用握手信息,互相交换联系信号,为了加密,还可以交换密码。
最简单的就是:发一帧数据时用几个字节,带不带校验和,起始字节是什么,结束字节是什么,关键的命令字是什么,数据字节是什么。命令字表示什么动作,数据表示状态。反正都是自己确定的,怎么编写协议都 行的。
jiafeimaozcb
2017-09-20 · TA获得超过2万个赞
知道大有可为答主
回答量:9859
采纳率:99%
帮助的人:899万
展开全部
下面以一个例程来做说明:

ARDUINO 代码复制打印
int incomingByte = 0; // 接收到的 data byteString inputString = ""; // 用来储存接收到的内容boolean newLineReceived = false; // 前一次数据结束标志 void setup() { Serial.begin(9600); //设定通讯端口及速率} void loop() { if (newLineReceived) { Serial.print(inputString); // 这里只是简单的将它打出来了,你可以根据自己的要求来用你接收到的数据...... inputString = ""; // clear the string newLineReceived = false; ........//其他你的程序 }} //serialEvent()是IDE1.0及以后版本新增的功能,不清楚为什么大部份人不愿意用,这个可是相当于中断功能一样的啊! void serialEvent(){ while (Serial.available()) { incomingByte = Serial.read(); //一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包 inputString += (char) incomingByte; // 全双工串口可以不用在下面加延时,半双工则要加的// // 下面就是所谓的通讯协议了,如果接收到了换行符号,本例是定义了这次串口通讯数据接收结束// // 其他的你还可以加一些规则,比如数据包起始位,规定一个数据包就是以FF为开头的,如果不是就不接收// // 也可以加上数据校验位,同样在这里做一个校验判断,如果不符合,则将数据包丢掉,再通过一个标志位写个值,// //在主程序里面让发送方重发(主程序里面都写一条IF就行了)// if (incomingByte == '\n') { newLineReceived = true; } }}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式