2

好的,所以我有 3 台设备。

  • 一个 AVR Butterfly 微控制器,使用 USART 设置
  • 一个 Bifferboard,运行 Debian,使用定制的串行程序。
  • 一台运行 Br@y's 的台式机。

所以我试图让 Bifferboard 向 AVR 发送串行数据,但 AVR 从来没有收到信号,(我们已经检查了电线)。但是,如果我将 AVR 连接到桌面盒,并使用 Br@y's 发送它就可以接收。

如果我将 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 对话。

4

3 回答 3

2

这是一个很长的镜头,但是所有的串行端口都以相同的电压水平运行吗?我看到 bifferboard 有一个 3.3V UART,而 AVR 有一个电平转换器。桌面端口的电压可能更灵活。

于 2010-02-18T15:46:43.187 回答
2

(我们检查了电线)

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

我敢打赌,您会在其他引脚上看到数据。但我不会打太多赌,因为串行 RS232 连接是如此棘手。

于 2010-02-18T15:47:42.987 回答
0

我会抛出另一个“远射”的可能性。根据电路板上使用的收发器芯片,它可能无法为 RS232 电平产生自己的负电源电压(通常通过电荷泵)。一些芯片会从生产线的另一端“偷走”它们的负电源,如果你正在与 PC 之类的东西交谈,那效果很好。但是,如果双方都采取这种方法,结果就不会那么好了。像 MAX232 这样的收发器(加上外部电容和电阻)会产生自己的负电源,但像 DS275 这样的芯片不会。

于 2010-02-22T16:48:57.053 回答