在linux上工作,使用以下方法将数据发送到115200波特的串口:
echo -e "\x1B\x11\x00\x00" > /dev/ttyAMA0
接收方正在阅读以下数据:
\xF8\x1B\x11\x00\x00\x0D\x0A
我不希望\xF8
作为起始字节而\x0D\x0A
作为尾部(回车符和新行字节)。
我怎么能删除它们?到目前为止,我发现的只有
stty raw -F /dev/ttyAMA0
这会停用\x0D
,但我想摆脱\xF8
和\x0A
,其他选项对我没用。
答案 0 :(得分:1)
您可以使用echo -en
删除换行符。或者改为使用printf
。
你是从树莓派发送的吗?似乎是一个已知问题,每次打开连接时都会发送0xF8
(例如,通过调用echo
)。我不知道是否有修复,但您可以通过使用串行终端程序保持连接打开以防止进一步0xF8
。
这里的第三篇文章中有一个示例,说明了如何使用bash中的重定向来保持连接:exec 9> /dev/ttyAMA0
http://www.raspberrypi.org/forums/viewtopic.php?t=34528&p=293067
潜在问题:
有人说这是一个驱动程序问题(见this answer)但据我所知,以下表明它与硬件有关:
http://elinux.org/RPi_Serial_Connection#Glitch_when_opening_serial_port
当串行端口打开时,TXD上的电压脉冲为负约32 us(无论波特率如何)。该脉冲可能被解释为连接到TXD引脚的器件的传输,这可能会产生意想不到的影响。
这也意味着您收到的垃圾取决于波特率。我不会依赖修复程序而是寻找解决方法。
如果您可以控制接收器,则可以使其等待自定义的字节序列,并且仅在接收到该序列后才开始操作。
上面elinux.org的链接可以为您提供其他一些想法。
答案 1 :(得分:-2)
已编辑*
如何使用stty来更改设备终端解释回车符和换行符的方式?
链路
http://www.computerhope.com/unix/ustty.htm
********************老人的回答*******************
如何使用sed删除" \ xF8"和" \ x0D \ x0A"?
sed -e 's/\\x0D\\x0A$//g' -e 's/^\\xF8//g' my_file > new_file
实用示例?
echo '\xF8\x1B\x11\x00\x00\x0D\x0A' |sed -e 's/\\x0D\\x0A$//g' -e 's/^\\xF8//g'
<强>输出强>
\x1B\x11\x00\x00