为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C程序中通过串口终端读取二进制数据?

如何在C程序中通过串口终端读取二进制数据?

如何在C程序中通过串口终端读取二进制数据?我通过串口与嵌入式设备通信。默认情况下,嵌入式Linux使用此端口作为终端。但我想通过端口传输二进制数据(服务数据包)。我的/ etc / inittab文件有一个“getty”调用: console :: respawn:/ sbin / getty 115200 ttyS0我还有/ etc / passwd文件,其中“admin”用户在登录后启动我的“cli”应用程序: admin:8Mt / Jtxcyg8AY:1000:0:admin:/ tmp:/ tmp / cli运行程序之前我的默认ttyS0设置是:~ # stty -aspeed 115200 baud;stty: standard input  line = 0;intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^J;eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff-iuclc -ixany -imaxbel -iutf8opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt-echoctl echoke~ #所以,在我的cli程序中,我执行以下操作:main (){     ...     system("stty erase ^H);     system("stty -F /dev/ttyS0 -icrnl -ixon -ixoff -opost -isig -icanon -echo");    // enter in non-canonical (raw) mode     // What function do I need to use here to retrieve binary data (also symbols that > 0x7F) from /dev/ttyS0?     system("stty -F /dev/ttyS0 icrnl ixon ixoff opost isig icanon echo");   // go back to canonical mode     ...     exit(0);}我尝试使用read()函数(使用unsigned char缓冲区)来获取二进制数据,但无法接收正确的数据。我还初步打开/ dev / ttyS0来获取file_descriptor并使用read()func。我的程序发送3个字节:0xAA,0x02,0xFE。但在syslog中,我总是看到设备收到错误的符号:0x98,0xE6,0x18。有什么事?如何获得正确的二进制数据?
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

我想我没有完全准备tty配置。以前我写了RS232toETH程序,并使用了所有这些工具,他们工作。但在那种情况下,我评论了在linux启动时启动控制台。只有我的应用程序使用/ dev / ttyS0。非常感谢锯末!:)你给了我一个主意。我想我会尝试解决方法(uuencode和uudecode / escape chars)。感谢您的时间。

查看完整回答
反对 回复 2019-08-28
  • 2 回答
  • 0 关注
  • 875 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信