为什么只有在按下回车键后才能以串行方式接收字符

我有一个简单的电脑板连接使用串行(9600,无奇偶校验,8位,无hwstream量)我打开简单的terminal*与teraterm)在电脑中,并input按键在teraterm和板,我只是做

cat /dev/ttyO5 

我在范围内看到按下的字符,但是只有在按下“enter”button之后,才能看到控制台控制台中的字符(就好像它们存储在Linux驱动程序中的某个FIFO中,只能进入触发器)

  1. 为什么只有在按下回车键的情况下才在Linux驱动程序中收到字符?
  2. 有没有办法接收字符,而不按回车键? (我们使用ascii的一些协议,所以发送它作为虚拟是没有意义的)

感谢您的build议,冉

Solutions Collecting From Web of "为什么只有在按下回车键后才能以串行方式接收字符"

但是只有在按下“Enter”键后才能看到控制台中的字符

你所描述的行为是典型阅读(aka reading lines)的特征。
您似乎想要的行为称为非规范读取(又名原始读取或二进制读取)。

  1. 为什么只有在按下回车键的情况下才在Linux驱动程序中收到字符?

不,Linux串口驱动程序正在接收每个字符,因为它出现在电线上。
每个字符都被缓冲(通常在DMA能够存储的内存中),然后被转发到一个线路处理处理程序 ,它也缓冲接收到的数据。
禁止用户级程序的规范read()系统调用,直到行纪律处理程序检测到行终止字符。

  1. 有没有办法接收字符,而不按回车键?

是的,在发出cat命令之前,将串口配置为非规范模式:

 stty -F /dev/tty05 raw 

或者更可能是正确的设备节点

 stty -F /dev/ttyO5 raw 

或者使用termios接口在板上的用户空间程序中将串行端口配置为非规范模式。 示例代码在这里 。

有关如何正确编程串行端口的文档是适用于POSIX操作系统的串行编程指南和设置终端模式 。