This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM368 的串口232 端口号ttyS1 是否支持 115200 波特率?



我现在 使用 DM368 串口UART1 接一个传感器,然后这个传感器所支持的波特率必须是 115200的。
我使用串口调试工具在PC上测试是可以使用的,但是波特率必须设为115200,如果是9600收到数据就不对了。
现在我将传感器与 DM368 的串口 UART1连接。该接口与传感器的RX/TX 交叉。UART硬件接法是没问题的。
但是我使用 Linux 串口编程,却无法获取传感器发送的数据。这个串口编程是之前DM368 RS485通信时写的。
现在修改了一下,程序肯定也是没问题的。

所以现在,想请教一下,DM368 的UART1 端口,是否支持波特率 115200呢?
RS232的最大传输速率不是 20kbps 吗?
DM368 的UART0 作为串口和PC相连,uboot指令上有如下设置的:
dm365_imp.oper_mode=0 mem=48M console=ttyS0,115200n8 noinitrd rw ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs
video=davincifb:osd0=720x576x16,4050K vpfe_capture.cont_bufsize=6291456
davinci_capture.device_type=1 vpfe_capture.interface=1

其中的 console=ttyS0,115200n8,应该就表示了 UART0 的 ttyS0端口是支持 115200波特率的。
那么现在换做 ttyS1 了,如果想要让它支持 115200 波特率 该怎么办呢?

  • 能open成功,就调串口相应的接口函数去设置波特率即可。

  • 在串口编程中我有设置波特率。

    我使用 stty 指令,测试并修改UART1的波特率:stty -F /dev/ttyS1
    root@dm368-evm:/# stty -F /dev/ttyS1
    speed 9600 baud;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
    lnext = ^V; flush = ^O; min = 1; time = 0;
    -brkint -imaxbel

    root@dm368-evm:/# stty -F /dev/ttyS0
    speed 115200 baud;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
    lnext = ^V; flush = ^O; min = 1; time = 0;
    -brkint ixoff -imaxbel
    -iexten -echoctl
    可以看到,ttyS1 的波特率为 9600。应该修改为 115200 才对的吧
    临时修改可使用指令: stty -F /dev/ttyS1 115200 掉电恢复。
    root@dm368-evm:/# stty -F /dev/ttyS1 115200

    root@dm368-evm:/# stty -F /dev/ttyS1
    speed 115200 baud;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
    lnext = ^V; flush = ^O; min = 1; time = 0;
    -brkint -imaxbel

    然后,我们还可以使用指令:cat /proc/tty/driver/serial 来看一下串口数据的传输。
    举个例子,上面我们不是讲了用 echo hello > /dev/ttyS1 来测试串口是否导通的。
    root@dm368-evm:/# echo hello > /dev/ttyS1

    root@dm368-evm:/# cat /proc/tty/driver/serial
    serinfo:1.0 driver revision:
    0: uart:16550A mmio:0x01C20000 irq:40 tx:3352 rx:137 RTS|CTS|DTR|DSR
    1: uart:16550A mmio:0x01D06000 irq:41 tx:7 rx:0 CTS|DSR
    通过这两个指令,就可以发现UART1 tx:7,即发送数据 7 bit。说明 UART1是导通的。

  • stty -F /dev/ttyS1 115200  这个方法是个临时方法,掉电恢复为 9600. 怎么能永久修改呢?

    我将这个指令写在脚本里,没有成功。


    再有,就算我临时改了波特率为 115200 了,通过 cat /proc/tty/driver/serial 看UART1是有数据接收的。但是还是打印不出十六进制的数据。