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

相关推荐
嵌入式大圣1 小时前
单片机在电路板中的应用
单片机·嵌入式硬件
小A1593 小时前
STM32完全学习——使用标准库完成PWM输出
stm32·单片机·学习
小A1593 小时前
STM32完全学习——使用标准库完成定时器中断
stm32·单片机·学习
美式小田3 小时前
单片机学习笔记 10. 中断系统(理论)
笔记·单片机·嵌入式硬件·学习
我不是码农 嘤嘤嘤3 小时前
单片机GPIO的8种工作模式
单片机·嵌入式硬件
相醉为友4 小时前
006 单片机嵌入式中的C语言与代码风格规范——常识
c语言·单片机·嵌入式硬件
努力的小雨5 小时前
一文详解:项目如何从Docker慢慢演变成了K8s部署
经验分享
LittleSeedling7 小时前
【bug】使用transformers训练二分类任务时,训练损失异常大
bug
何遇mirror7 小时前
【话题】Bug 故事:跨时区的时间转换错误
bug
蜡笔羊驼7 小时前
pyfftw BUG
bug