• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

RS485通信问题,能收不能发

zzzqiu 2019-11-15 浏览量:2973

【前三名回答额外获得100IC币】

跟踪调试,单片机能收到串口助手发来的数据;485芯片的控制引脚信号也是对的,发送数据时,能进入发送函数


RS485_EN = BUS_TX_STATE;        //发送模式
delay_ms(10);
while(len--)
{
  while(USART_GetFlagStatus(USART1USART_FLAG_TXE)==RESET);//等待发送区为空
  USART_SendData(USART1*(buff++));
}
while(USART_GetFlagStatus(USART1USART_FLAG_TC)==RESET);//等待发送完成
RS485_EN = BUS_RX_STATE;        //接收模式
delay_ms(10);

查看寄存器,相关标志位也是正常变化的,但是串口助手却没收到数据。

这个可能是什么问题?


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这种应该是硬件问题,第一判断使能引脚电平是否变化,如果没配置好是不会变化的,第二检查485芯片是否真的把数据发送出去了。可以用万用表测量485的ab两个脚电压是否跳变
    • 发布于 2019-11-15
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • RS485的发送函数:

      GPIO_SetBits( RS485_DIR_PORT[COMx] RS485_DIR_PIN[COMx]);
      DealyCnt = 50;
      while (DealyCnt--);
      while (len--)
      {
        USART_SendData(RS485_base[COMx] *str++);
        while (USART_GetFlagStatus(RS485_base[COMx] USART_FLAG_TC) == RESET);  /@@* 等待发送结束 */
      }
      DealyCnt = 50;
      while (DealyCnt--);
      GPIO_ResetBits( RS485_DIR_PORT[COMx] RS485_DIR_PIN[COMx]);


    这个是我在STM32F103上跑得代码,一直用在项目上,没有任何问题。

    如果上位机还是接收不到数据,你可以使用示波器看看A\B线上的波形。

    • 发布于2019-11-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口助手上的设置的参数是不是对的呢。

    一些硬件的流控是不是关了

    接收方式选择16进制方式

    再试试

    • 发布于2019-11-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 能收说明485链路没有问题,不能发可能是软件问题,DE脚你用万用表测一下是不是正常切换电平了,串口的配置也检查一下是不是开了什么流控,或者没开发送使能等。
    • 发布于2019-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个要考虑那个接485芯片的发送脚是不是存在虚焊的现象,可以用示波器测一下485芯片发送脚的电平
    • 发布于2019-11-30
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

RS485通信问题,能收不能发