关于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 默认是高电平。

相关推荐
hrw_embedded32 分钟前
Keil开发与STM32Cube开发的差异点总结(未完待续)
stm32·单片机·嵌入式硬件
Brilliantwxx37 分钟前
【STM32】RCC与时钟树 深度详解
stm32·单片机·嵌入式硬件·架构
Ztt66666666641 分钟前
月白大竹节壶不露锋芒,竹意藏在嘴把转折里
经验分享·笔记·其他·百度·微信公众平台
天空'之城1 小时前
单片机基础核心知识点汇总(二十九)
单片机·嵌入式硬件
一路往蓝-Anbo1 小时前
第七篇:以太网设计 —— 从 RMII 时序到变压器隔离的深度拆解
stm32·单片机·嵌入式硬件·嵌入式·stm32硬件设计
ychqsq1 小时前
159.夜思
经验分享·职场和发展
jianqiang.xue2 小时前
ESP-IDF保姆级入门22|WiFi联网与网络编程全解:STA/AP双模式/TCP-UDP Socket/HTTP服务端/自动重连,掌握工业级可靠网络通信
人工智能·stm32·单片机·mcu·物联网·51单片机·iot
恒锐丰科技林技术员6 小时前
EG2302 半桥驱动芯片详解:高压半桥高性价比栅极驱动方案
经验分享·嵌入式硬件·硬件工程
LCG元11 小时前
STM32 定时器编码器接口模式电机测速实战:从 CubeMX 配置到 M 法转速计算与溢出处理
stm32·单片机·嵌入式硬件
BestHeaker11 小时前
制造业 MES 开发入门:和互联网业务开发的 5 个本质差异(一)
数据库·经验分享·制造业·mes