开发单片机底层与通信有关的部分时候,理论上一直感觉不踏实,自己揣摩着应该是这么用串口,SPI,I2C...等,,拿串口做例子,接收开中断,开接收缓冲区,自定义通信协议的包格式应该为"0x55,0xFF等包头 + 包长度 + 数据部分 + CRC校验",接收到包头后即将后续收到的数据放入接收缓冲,收到指定长度的数据后即置消息有效,for(;;)里面根据数据部分对各种消息做相应的反馈...发送消息时候也是开发送完成中断,开发送缓冲区,消息包组装好后,启动第一字节发送,中断里面判断判断全局发送计数器,决定是否继续发下一个数据,链式效应....一直以来也没有机会请教大牛,只是自己瞎琢磨,能力提升慢,总感觉基本功不够踏实,希望能和喜欢专研的兄弟交流吧,我的Q:27027 1527.....
------解决方案--------------------
通常情况下串口通信的命令桢格式如下:
STX+ADD+CMD+[Data]+ETX+CHECK
STX:通信命令起始符号,是一个通信命令桢的开始。这个字符不可重复。
ADD:下位机地址,每个下位机都拥有惟一的下位机地址,它标识了上位机通信的对象,不可重复。
CMD:通信命令,用户定义通信功能,一般分为:读写两种。
Data:可选,作为对CMD的补充,比如你要对下位机写数据,那么这个Data就可以作为写入的数据。
ETX:通信命令桢的结束符号,是一个命令桢的结束,这个字符也是不可重复的。
CHECK:校验和,一般是对从STX到ETX的一种校验计算,通信双方可以通过算法计算出正确的校验值,和这个通信接收到的值进行比较,如果相同,标识本次通信正确,如果不相同标识本次通信不正确。
------解决方案--------------------
找一个你常用的领域的协议 (modbus, canbus 或 电表类)研究一下