c++ - 奇怪的串行通讯错误

标签 c++ serial-port debian avr libserial

好的,我有 3 台设备。

  • 一个 AVR Butterfly 微 Controller ,使用 USART 设置
  • 一个 Bifferboard,运行 Debian,使用定制的串行程序。
  • 运行 Br@y 的桌面计算机。

所以我试图让 Bifferboard 向 AVR 发送串行信号,但 AVR 从未收到信号(我们已经检查了电线)。但如果我将 AVR 连接到桌面盒,并使用 Br@y 发送,它接收效果就很好。

如果我将 Bifferboard 连接到桌面,Br@y 的接收效果很好。

这是 Bifferboard 的代码。

#include "string2num.h" //a custom header
#include <cstdlib>
#include <iostream>
#include <SerialStream.h>
using namespace LibSerial;
//using namespace std;



int main(int argc, char*argv[])
{
        if (argc<2)
        {
                std::cout<<argv[0]<<" requires the device name eg \'dev/tty0\' as a parameter\nterminating.\n";
                return 1;
        }

        SerialStream theSerialStream(argv[1]); //open the device
        if(!theSerialStream.IsOpen()) //did the device succesfuilly open
        {       //open faile
                std::cerr<<"Open " << argv[1] << " failed\n Terminating.\n";
                return 1; //exit failure
        }

        theSerialStream.SetVMin(0);//no min number of characters to send
        theSerialStream.SetVTime(0);// don't wait betwenn characters

        theSerialStream.SetBaudRate( SerialStreamBuf::BAUD_19200);
        theSerialStream.SetCharSize(SerialStreamBuf::CHAR_SIZE_8); //8
        theSerialStream.SetParity(SerialStreamBuf::PARITY_NONE);//   N
        theSerialStream.SetNumOfStopBits(1);//                       1

        theSerialStream.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);


        std::cout<<"Ready for serial trasmission. Press Ctrl+C to quit\n";
        //insert basic instructions here

        while (1)
        {
                char input[BUFSIZ];

                std::cin>>input;

                char* values=getAllValues(input); //DECODE any formatting (this function is in the custom header)
                std::cout<<"about to transmit: " << values << "\n";

                theSerialStream << values;
                free(values);
        }
        theSerialStream.Close();
        return 0;



}

我还尝试过使用 Bifferboard 的 minicom - 它可以与桌面 Windows 机器通信,但不能与 AVR 通信。

最佳答案

(We've checked the wires)

这听起来仍然像是布线问题。如果 Br@y's 可以与两者通信,那么这似乎不是配置问题。您应该在 AVR 的接收引脚(可能还探测其他引脚)上放置逻辑分析仪或示波器,并在尝试从 Bifferboard 发送数据时查看电气情况。

我敢打赌您会看到其他引脚上的数据。但我不会打太多赌注,因为串行 RS232 连接是一件非常敏感的事情。

关于c++ - 奇怪的串行通讯错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289785/

相关文章:

c++ - 仅在 header 中的extern变量意外起作用,为什么?

c++ - 如何在 Windows 上将串行数据从 Python 脚本发送到 Arduino - 没有用

c++ - mini6410 上的 Open Cv 和 GPIO 问题

linux - Debian 8 Lenovo 安装上没有网络接口(interface)

c++ - api 特定类型定义的目的是什么,例如 GLsizei GLint GLvoid?

c++ - vector的内存管理

c# - C#从串口读取字节流

serial-port - 如何在软件中将两个物理串行端口相互桥接(并记录通过的数据)?

php - Curl PHP - 奇怪的内部服务器错误

c++ - 重载 new 返回的值与 this 不匹配