C UART一直不工作

C UART一直不工作,c,serial-port,embedded,uart,C,Serial Port,Embedded,Uart,我在将串行设备连接到正在编写代码的嵌入式设备时遇到问题 我正在写的设备有两个串行端口,一个从笔记本电脑输入,一个从外部设备输出 当我将两个终端连接到笔记本电脑并查看数据时,我得到的正是我所期望的数据 当我将笔记本电脑直接连接到外部设备时,我得到的正是我所期望的,以及一个响应 当我将笔记本电脑和外部设备连接到我正在使用的嵌入式设备时,笔记本电脑向其发送数据,接收数据,并将数据传递到外部设备。这正如预期的那样有效 但是,外部设备不会发回响应 如果我从嵌入式设备向外部设备发送数据,我发送的每个新消息都

我在将串行设备连接到正在编写代码的嵌入式设备时遇到问题

我正在写的设备有两个串行端口,一个从笔记本电脑输入,一个从外部设备输出

当我将两个终端连接到笔记本电脑并查看数据时,我得到的正是我所期望的数据

当我将笔记本电脑直接连接到外部设备时,我得到的正是我所期望的,以及一个响应

当我将笔记本电脑和外部设备连接到我正在使用的嵌入式设备时,笔记本电脑向其发送数据,接收数据,并将数据传递到外部设备。这正如预期的那样有效

但是,外部设备不会发回响应

如果我从嵌入式设备向外部设备发送数据,我发送的每个新消息都允许它发送原始回复

我知道第一条消息是正确通过的,因为外部设备正在运行,我通过在tx/rx通信上运行和逻辑分析仪并查看通信量知道它何时发送响应

我认为嵌入式设备正在保持接收线路并阻止其传输,但我不认为这在代码中是可能的。如果是这样的话,当我把两条线都插进笔记本电脑时,它就不应该工作了

我还认为DTR没有设置为高,但检查了这个,它似乎设置为高

有人知道阻止设备响应的原因吗

注意:当我说串行端口时,我指的是UART,而不是嵌入式设备。所有设备都使用运行RS232的DB9连接器

编辑:笔记本电脑上的操作系统是Windows 10。嵌入式设备是一个Atmega324p

编辑2:做了更多的测试。看起来它有时起作用,有时不起作用

我添加了一个图像,显示了几乎完美的反应信号。


蓝色部分是信号中不应该存在的间隙

最终找到了解决办法

RTS线路通过嵌入式设备保持在1.2v,而Pc保持在5.2v


将RTS线路拉高至5v已修复此问题。

C语言没有串行端口库。您应该从指定您使用的操作系统开始。例如,POSIX兼容的操作系统将使用header.OS?什么是操作系统?他说是嵌入式设备。听起来你得为这一个打开示波器。首先,弄清楚你是否真的在向外部设备发送信号,不仅仅是你的代码说它发送了什么,而是信号确实发生了。如果您有来自嵌入式设备的第三个输出通道用于调试,那么它也很方便。可能是第三个UART,或者可能是将调试信息写入闪存,以便在运行后读取。@Julien-L更新了我的问题,以反映有关UART而不是串行端口的一些更具体的信息。@Lee Daniel Crocker我使用的是Salae逻辑分析仪而不是示波器,因此我可以直接查看信号。嵌入式设备向外部设备发送“初始化”消息。外部设备不会将Ack+MSG回复回嵌入式设备。不过,有时候的确如此。有时它只是发送部分Ack+MSGWe,我们不知道您在使用什么代码,我们也不知道什么是OS/RTOS/什么。我们不知道您使用的是什么硬件,也不知道您使用的是什么串行协议。你建议我们怎么做?只是把它拉上去听起来很危险-你应该弄清楚为什么它是1.2v。用于此目的的I/O引脚的逻辑电平是多少?它是否实际配置为推/拉驱动输出?