好的,所以我有3台设备。
所以我试图让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通信。
答案 0 :(得分:2)
这是一个很长的镜头,但所有的串口都运行在相同的电压水平?我看到双板有一个3.3V的UART,而AVR有一个电平转换器。桌面端口可能对电压更加灵活。
答案 1 :(得分:2)
(我们检查了电线)
这仍然听起来像布线问题。如果Br @ y可以与两者通信,那么它似乎不是配置问题。您应该在AVR的接收引脚(可能探测其他引脚)上放置一个逻辑分析仪或示波器,并在尝试从Bifferboard发送数据时查看发生的电气情况。
我敢打赌,你会看到其他针脚的数据。但我不会打赌很多,因为串行RS232连接是一件非常敏感的事情。
答案 2 :(得分:0)
我会抛弃另一种“远射”的可能性。根据电路板上使用的收发器芯片,它可能无法为RS232电平产生自己的负电源电压(通常通过电荷泵)。一些芯片会从线路的另一端“窃取”它们的负电源,如果你正在谈论像PC这样的东西,它会很有效。然而,如果双方采取这种方法,那么它就不会那么有效。像MAX232这样的传感器(加上外部电容和电阻)会产生自己的负电源,但像DS275这样的芯片却没有。