C 为什么我在串行端口上连续接收数据?

C 为什么我在串行端口上连续接收数据?,c,linux,serial-port,C,Linux,Serial Port,我买了一个GSM模块,我试图通过USB到串行接口(FT232来命名组件)来控制它 在GSM模块之前,我编写了一个测试FT232的小程序(通过连接TX和RX),我遇到了一个问题 我可以发送数据(通常是“AT\r”),也可以接收相同的数据(希望如此),但我会一次又一次地接收数据(通常是“0x0A”,有时是原始数据:“AT\r”) 你能帮我解决这个问题吗 main.c代码 感谢@sawdust的评论。 我添加此选项是为了解决禁用输入回显的问题: serial_termios.c_lflag &

我买了一个GSM模块,我试图通过USB到串行接口(FT232来命名组件)来控制它

在GSM模块之前,我编写了一个测试FT232的小程序(通过连接TX和RX),我遇到了一个问题

我可以发送数据(通常是“AT\r”),也可以接收相同的数据(希望如此),但我会一次又一次地接收数据(通常是“0x0A”,有时是原始数据:“AT\r”)

你能帮我解决这个问题吗


main.c代码


感谢@sawdust的评论。 我添加此选项是为了解决禁用输入回显的问题:

serial_termios.c_lflag &= ~(ECHO | ECHOE | ECHONL | IEXTEN)

感谢@sawdust的评论。 我添加此选项是为了解决禁用输入回显的问题:

serial_termios.c_lflag &= ~(ECHO | ECHOE | ECHONL | IEXTEN)

如果在没有新数据的情况下继续读取DR,它将继续保持不变。AT命令以
“\r\n”
结尾,并且
'\n
可能会
'==0xA
,因此它是有意义的。谢谢您的回答。这个命令很有意义,但我如何知道是否有新消息或来电?我应该继续检查串行端口吗?@Fiddling Bits,你说当没有收到新数据时,芯片的寄存器不会改变,因此包含收到的最后一个字符。这很有道理。你知道他叫“读序列号”有什么问题吗?当没有收到新数据时,它应该阻塞还是返回零?读取\ U串行返回select的值。在我的例子中,它总是返回一个大于0的值,就好像我在输出中添加了新数据一样,正如我们所看到的,输出有时会发生变化。我不明白为什么如果你在没有新数据的情况下继续阅读DR,它将继续保持不变。AT命令以
“\r\n”
结尾,并且
'\n
可能会
'==0xA
,因此它是有意义的。谢谢您的回答。这个命令很有意义,但我如何知道是否有新消息或来电?我应该继续检查串行端口吗?@Fiddling Bits,你说当没有收到新数据时,芯片的寄存器不会改变,因此包含收到的最后一个字符。这很有道理。你知道他叫“读序列号”有什么问题吗?当没有收到新数据时,它应该阻塞还是返回零?读取\ U串行返回select的值。在我的例子中,它总是返回一个大于0的值,就好像我在输出中添加了新数据一样,正如我们所看到的,输出有时会发生变化。我不明白为什么
serial_termios.c_lflag &= ~(ECHO | ECHOE | ECHONL | IEXTEN)