【发布时间】:2013-03-21 15:03:39
【问题描述】:
我如何通过串行端口向 LPC 1786 微控制器发送一些命令。为了完成这个任务,我使用这段代码打开了串口。
struct termios tio;
int tty_fd;
memset(&tio,0,sizeof(tio));
tio.c_iflag = 0;
tio.c_oflag = 0;
tio.c_cflag = CS8|CREAD|CLOCAL; // 8n1, see termios.h for more information
tio.c_lflag = 0;
tio.c_cc[VMIN] = 1;
tio.c_cc[VTIME] = 5;
tty_fd = open(device, O_RDWR | O_NONBLOCK);
cfsetospeed(&tio, B9600); // 115200 baud
cfsetispeed(&tio, B9600); // 115200 baud
tcflush(tty_fd, TCIFLUSH);
这适用于使用 (iMX53) 的嵌入式 linux 系统。当我在我的 PC 上编译代码并运行它时。我明白了:
sent: ?
recieve: Sinchronized<CR><LF>
sent: Sinchronized<CR><LF>
recieve: Synchronized<CR>OK<CR><LF>
sent: 16000<CR><LF>
recieve: 16000<CR>OK<CR><LF>
女巫很好。当我交叉编译并将其上传到系统时,我得到了这个。
Sent: ?
HEX: 0x53 0x79 0x6E 0x63 0x68 0x72 0x6F 0x6E 0x69 0x7A 0x65 0x64 0xA 0xA 0x53 0x79 0x6E 0x63 0x68 0x72 0x6F 0x6E 0x69 0x7A 0x65 0xA
ASCII: SynchronizedSynchronizedOKOKnchronized1K024K024chronized1
Sent: ?
HEX: 0xA 0xA 0xA 0xA 0xA 0xA 0xA 0x30 0xA 0xA 0x31 0xA 0xA 0xA 0xA 0xA 0xA 0x34 0xA 0xA 0x31 0xA 0xA 0xA 0xA 0xA 0xA 0xA 0xA 0xA 0A
ASCII: 014141hronized1111111ronized1
女巫毁了我的一天。对于写作和阅读,我正在使用 write & read 功能。我敢打赌这与我打开串口的方式有关。但是有什么不对。我尝试了不同的设置,但收效甚微。在最好的情况下,我得到“?????1???”作为回应。而且大多数时候没有什么可读的。
【问题讨论】:
-
你运行的波特率是多少?这类问题总是有波特率不匹配的味道。我在您的代码中看到 9600,在评论中看到 115200 并且不知道它在主机端是什么:P
-
我正在测试不同的速度。主机 -> 速度 9600 波特;stty:/dev/ttymxc4 intr = ^C;退出 = ^\;擦除 = ^?;杀死 = ^U; eof = ^D; eol =
; eol2 = ;开始 = ^Q;停止 = ^S;悬念 = ^Z; rprnt = ^R;错误 = ^W;下一个 = ^V;冲洗 = ^O;最小值 = 1;时间=0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -
这很奇怪。你确定你的处理器的输入时钟是正确的吗?
-
是的,时钟是正确的。我认为这与
有关。因为从 LPC 的输出中我们可以读取“同步”,如果速度或回合率出现问题,我们会在那里看到“猴子”字符串。我正在根据 解析响应,并且没有一个简单的响应。 -
很公平。老实说,我不知道其他情况,除非你的电缆有点坏。您使用的是哪个开发板,还是定制设计?
标签: c linux embedded serial-port lpc