我想通过计算机中的真实串口将二进制数据从我的PC传递到我的微控制器。在这个时候,我正在考虑使用INB和OUTB函数,所以我不必忍受linux tty字符覆盖。
问题是,如果我将其地址与INB和OUTB功能一起使用,如何配置串口的波特率?例如,如果我想写入COM1(0x3F8),我将如何确定正在写入的波特率数据?
stty是否仍然使用INB和OUTB或setserial或者什么来进行某种背景控制?
答案 0 :(得分:1)
目前,我正在考虑使用INB和OUTB功能,因此我不必忍受linux tty字符覆盖。
这是一个可怕的,没有好的,非常坏的想法,它不会起作用。如果您尝试从其下更改端口配置,现有的串行驱动程序将会非常混乱。
Use standard UNIX APIs to interact with the serial port.这并不难。
答案 1 :(得分:0)
参见http://www.tldp.org/HOWTO/text/IO-Port-Programming第6.3节:
如果您正在与之通话的设备支持类似RS-232的设备, 你应该能够使用串口与它通信。 Linux 串行驱动程序应该足以满足几乎所有应用程序(你 不应该直接编程串口,你可能 必须写一个内核驱动程序来做到这一点);它非常通用,所以 使用非标准的bps率等等应该不是问题。
为了说明这一点,这里是原始问题“如何设置波特率”的答案:
除了端口(例如COM1的0x3F8)之外,接下来的几个端口号用于各种控制目的。要设置波特率,首先计算除数115200 / [所需波特率]。例如。如果你想要38400波特,则除数为3.然后:
在代码中:
outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor)
outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud
outb(PORT + 1, 0x00); // (hi byte)
outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit