stm32f103串口接收数据解析的问题

2019-07-21 00:59发布

本帖最后由 Quantum 于 2018-7-25 18:47 编辑

描述:生产测试装备把多个命令通过串口发给CPU,这些命令是有头有尾的。CPU通过解析这些命令来调用相关函数从而控制外设做出相应的动作,也有的命令是返回给生产测试装备的。   

思考:先把接收到的指令放在接收缓冲区中,然后读取缓冲区中的内容,调用相关函数。

问题:现在,头、尾和命令字都给了。1. 具体该怎样搭建这个解析的框架?2. 如何从接收缓冲区里读出命令字?3. 接收缓冲区的大小是由什么决定的?


本人菜鸟一枚,一旦牵扯到存储的东西,就晕头转向。哪位大神解答,谢谢~


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
Quantum
1楼-- · 2019-07-22 05:13
warship 发表于 2018-7-25 20:59
干嘛要左右移8位,
如果规定帧头是0xAA, 帧尾是0x0D
检查正确就丢弃不管了,

//RX_BUF[MAX]是接收缓冲区,已经接收完了,就是说里面的东西已经写死,再按下面执行就达到了命令解析的目的了,对吗?
if(RX_BUF[0]!=0xAA)
{
     {printf("other ");}//判断第一个元素不是0xAA
else
     {
      switch(RX_BUF[1]) //判断第二个元素是0x26还是0x0A
         {case 0x26:
              printf("0x26 ");
          break;
          case 0x0A:
              printf("0x0A ");
          break;
          default:
          break;
     }
}
warship
2楼-- · 2019-07-22 05:45
 精彩回答 2  元偷偷看……
Quantum
3楼-- · 2019-07-22 11:31
 精彩回答 2  元偷偷看……
warship
4楼-- · 2019-07-22 12:01
原子的串口例程是接收字符串,它以接收0DH,0AH即回车、换行作为结束标志,这样才可以做到缓冲区的第一个字符就是字符串的第一个字符。对于二进制的接收处理则靠分析解析,缓冲区仅起缓冲作用。如果你所收数据全是工整的标准头尾,可以简化解析,仿一下原子的例程,收到头就舍弃,作标记已经收到头,后边收到的正文才放进缓存,直到收到尾,清标记,准备收下一帧。这样,缓存的内容就完全是纯正文了。
zkevin8879
5楼-- · 2019-07-22 13:39
提供个我的之前项目文件,希望能帮到你,可能有些写的过于简单,modbus.txt文件只是名字叫modbus,并没有去按modbus去写,不要理解错了。usart.txt跟原子哥的有点类似但不一样 我是以0xFD为帧头,0xFA 0xFA为帧尾
Quantum
6楼-- · 2019-07-22 17:39
warship 发表于 2018-7-26 15:16
原子的串口例程是接收字符串,它以接收0DH,0AH即回车、换行作为结束标志,这样才可以做到缓冲区的第一个字 ...

很赞,明白了,谢谢~

一周热门 更多>