关于RS485通信失败的问题(忽视了使能引脚)

问题

如图,使用485进行串口通信时,程序一直卡在接收这句。

解决

检查串口引脚配置都没问题,因此怀疑是硬件的原因。

在RS485通信中,通常需要一个使能信号来控制半双工总线上的发送和接收状态,这个信号经常被标记为:"DE(driver enable)"或"RE(receiver enable)"。

如图所示,DE1_RS485 控制信号用来切换收发器的工作模式。当MCU需要发送数据时,会通过设置DE1_RS485为高电平来启用发送驱动器,并在数据发送完毕后将其设置为低电平以禁用发送器并启用接收器。

因为RS-485接口允许半双工通信,即同一对线不能同时发送和接收数据。因此,必须在发送和接收之间切换。

因此,DE1_RS485 默认应该是低电平(接收状态),高电平时,发送状态;低电平时,接收状态。

修改程序如下,可以正常运行:

c 复制代码
  #define RX_485 HAL_GPIO_WritePin(DE1_RS485_GPIO_Port, DE1_RS485_Pin, GPIO_PIN_RESET)
  #define TX_485 HAL_GPIO_WritePin(DE1_RS485_GPIO_Port, DE1_RS485_Pin, GPIO_PIN_SET)

  for(;;)
  {
	  Run_Led();
		  
	  TX_485;
      HAL_UART_Transmit_IT(&huart1, "100ask\r\n", 8);
      HAL_Delay(100);
	  RX_485;

      while (HAL_OK != HAL_UART_Receive(&huart1, &c, 1, 100));
      c++;
	  TX_485;
      HAL_UART_Transmit_IT(&huart1, &c, 1);
      HAL_Delay(100);
	  RX_485;	  

  }

补充

开始时,发送很正常,不能接收,应该是因为:没有配置时,DE1_RS485 默认是高电平。

相关推荐
水力魔方4 小时前
SWMM深度二次开发专题6:年径流总量控制率及年径流污染总量削减率的计算
经验分享·swmm
浩瀚地学5 小时前
【Java】面向对象进阶-接口
java·开发语言·经验分享·笔记·学习
落幕_7 小时前
富文本编辑基础核心
开发语言·javascript·经验分享
中屹指纹浏览器7 小时前
2026多账号运营技术方案:指纹浏览器与IP协同适配实操指南
经验分享·笔记
三流架构师8 小时前
初中英语资源合集
经验分享
-曾牛8 小时前
【汇编语言入门】从第一个加法程序吃透汇编核心基础
汇编·单片机·嵌入式硬件·汇编语言·病毒分析·lcx·逆向开发
小矮强8 小时前
CASS/CAD提取红线节点坐标
经验分享·测绘·cass
三流架构师8 小时前
初中语文资源合集
经验分享
三品吉他手会点灯9 小时前
STM32F103 学习笔记-21-串口通信(第3节)-STM32串口初始化结构体和固件库讲解
笔记·stm32·单片机·嵌入式硬件·学习
苍何fly9 小时前
耗时 8 天,我用 Claude Code 开发了 AI 漫剧 APP,并开源了。
人工智能·经验分享