MBed / Arduino RS-232串行通信问题

时间:2013-07-22 09:37:57

标签: serial-port arduino mbed

我正在从CAN接口接收消息到我的mBed设备中。然后,mBed设备解析信息以将串行发送到另一个设备。信息以下列格式发送。

“< msg> xxxxxxxxxxxxxxxxxxx< / msg>”其中x =十六进制数。

接收此消息的其他设备将收到分成两半的信息(我已在代码中对此进行了说明)。我遇到的问题是,消息将落入格式.....但有时格式丢失,例如:

[1]xxxx< /msg>< msg>xxxxx
[2]xxxxxxxx< msg>xxxxxxx
[3]< /msg>< msg>xxxxxxxxx
[4]xxx< /msg>< msg>xxxxxx
**Please ignore the space in the msg tag, it was necessary to show on StackOverflow'**

mBed上的波特率设置为38400bps。我没有使用任何奇偶校验,停止位,启动位等,因为我不太熟悉它们的工作方式。任何人都可以帮助我如何解决这种格式损失,或者我将不得不在接收设备中包含代码来处理这个问题?

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

这是完全正常的,串行端口不够智能,无法识别XML。您必须自己编写代码。基本算法是状态机。声明一个足以存储完整消息的缓冲区。然后:

  1. 扔掉所有东西,直到你得到'&lt;'
  2. 存储您在缓冲区中收到的字节,直到您获得'&gt;'
  3. 检查您是否<msg>,如果您没有
  4. 则返回状态1
  5. 存储您在缓冲区中收到的字节,直到您获得'&gt;'
  6. 检查您是否<msg/>,如果您没有
  7. 则返回状态1
  8. 处理消息,返回状态1
  9. 这可确保您在打开端口时正确地与总线同步,并且您不关心在一次read()调用中收到多少字节。