badboyhr 发表于 2013-12-21 11:11:51

Arduino 与RS232 通讯问题

想要用Arduino采集天平的数据,然后实现反馈调节控制,但是在采集数据这一步就出现问题了。
天平是Sartorius BSA2202 通讯接口是RS232,波特率1200,7位数据位,偶校验,2位停止位,更详细的接口定义在附件里
用 MAX 3232 一端接天平,另一端RX、TX交叉接到Uno板子上,MAX 3232板子上的vcc接Uno的5v,GND对接。写入下面的程序:
void setup()
{
Serial.begin(1200,SERIAL_7E2);
}
void loop()
{
if(Serial.available())
{Serial.write(Serial.read());
}
}

Uno没有反应,Rx、Tx灯不亮,USB线连接电脑,串口监视器没有数据传回

用RS232线直接将天平与电脑连接,用串口调试工具检测信号,设置波特率1200,数据位7,偶校验,停止位2,能够接收到天平传过来的数据

将MAX3232 插入电脑的RS232-DB9接口,MAX3232与Uno的连接和上面一样,程序也不变。打开两个端口(与MAX3232 连接的RS232端口,及与Uno直接连接的USB端口)的串监视器(波特率都选择1200),Uno能够接受RS232 端口传出的信号,并且在USB端口的监视器上也能够显示。

我考虑过是不是用一对串行通讯端口同时实现和天平及电脑之间的通讯会有问题,于是,找到了SoftwareSerial.h。
然后将MAX 3232的Tx接到Uno的8,Rx接到Uno的9,写入下面程序:
#include<SoftwareSerial.h>
SoftwareSerial my(8,9);

void setup()
{
my.begin(1200);
Serial.begin(1200);
}
void loop()
{
if(my.available())
Serial.write(my.read());
if(Serial.available())
my.write(Serial.read());
}

发现软串口貌似不能设置校验位,数据位,停止位。
然后,结果一样,这样设置能够接收电脑RS232端口的数据,传回至USB端口,Tx端口闪烁,开两个串口监视器能够互相传数据。

但是连接到天平后还是一样,接收不到信号,Uno上的Tx、Rx不闪烁,电脑上串口监视器没有信号

哪位大侠给指点一下啊,感激不尽啊!

i7456 发表于 2013-12-21 12:08:56

本帖最后由 i7456 于 2013-12-21 12:11 编辑

void setup()
{
Serial.begin(1200,SERIAL_7E2);
}
void loop()
{
if(Serial.available())
{
    char c = Serial.read();
    Serial.print(c);
}
}uno的TX不要接,上面的程序试试是否可以。

插着USB线的时候,尽量不要再在UNO的RX上再接别的设备了,这时UNO即要接收USB来的信号,又要接收MAX3232的信号,容易出问题。

建议换成Leonardo 或者mega,不止一个串口可用。

badboyhr 发表于 2013-12-21 12:50:22

i7456 发表于 2013-12-21 12:08
uno的TX不要接,上面的程序试试是否可以。

插着USB线的时候,尽量不要再在UNO的RX上再接别的设备了,这时 ...

试过了 Tx拔掉还是不行
我试过了把USB拔掉 另外用9v电源给Uno供电,然后按上面的接到天平上,Uno上面的Tx,Rx仍然不闪烁,所以我怀疑即使换了mega也未必能行
我看天平说明说上面 还有一个 握手协议:硬件 CTS后一个字节 这个什么意思不懂 会不会是这个问题啊

i7456 发表于 2013-12-21 13:11:00

badboyhr 发表于 2013-12-21 12:50 static/image/common/back.gif
试过了 Tx拔掉还是不行
我试过了把USB拔掉 另外用9v电源给Uno供电,然后按上面的接到天平上,Uno上面的T ...

TX,RX指示灯是USB转串口芯片上的,只在USB口通讯时才闪亮

误入、人间 发表于 2017-9-20 22:14:48

跪求,,,楼主最后怎么解决的啊:'(:'(:'(
页: [1]
查看完整版本: Arduino 与RS232 通讯问题