一个485通信的问题,能发送不能接收,求大神指点

2015-07-171.1万
AI 快速预览详细 收起
本文讨论了485通信中只能发送而无法接收数据的问题。通过代码示例,展示了如何使用digitalWrite(EN, HIGH)和digitalWrite(EN, LOW)来切换485模块的发送和接收状态。文章还提供了故障排查步骤,帮助技术人员解决这一常见问题。


通过串口助手调试能正确收到485发送来的数据,但是返回数据收不到求大神指点,digitalWrite(EN, HIGH);//为发送状态
digitalWrite(EN, LOW);//为接收状态
代码如下:


int EN = 7;    //定义RS485扩展板的使能端(2号数字IO口),高电平为发送状态,低电平为接收状态
unsigned char RX = 0;
void setup()
{
  Serial.begin(1200, SERIAL_8E1);
  Serial.flush();
  delay(1000);
  pinMode(EN, OUTPUT);
  pinMode(8,OUTPUT);
  digitalWrite(EN, HIGH);
}

void loop()
{
   digitalWrite(EN, HIGH);
  char hexdata[14] = {0x68, 0x73, 0x26, 0x12, 0x00, 0x80, 0x013, 0x68, 0x01, 0x02, 0x43, 0xc3, 0x17, 0x16};
  Serial.write(&hexdata[0], 14);
  delay(300);
  digitalWrite(EN, LOW);

  if (Serial.available() > 0)
  {
    unsigned char RX = 0;
    RX = char(Serial.read()); //Serial.read();
    Serial.println(RX);
    digitalWrite(8, HIGH);
    delay(1000);
    digitalWrite(EN, HIGH);
  }

  delay(3000);

}


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
Cain
Cain
那就是没收到数据咯,硬件上怎么连接的?
maxfeel
maxfeel
作者
回复Cain
问题已经解决,是返回之前的延时问题delay(1000); //这个用200就可以了
pinMode(EN, OUTPUT);
maxfeel
maxfeel
作者
实际情况是 if (Serial.available() > 0) 这个都没有进去!
maxfeel
maxfeel
作者
单独试过可以收到信息
Cain
Cain
感觉你的程序里不对劲啊,好像一变成LOW之后收到一个字符就立刻进入循环变成high了呀,不要用使能,单独测试一下接收功能吧
- 没有更多了 -