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

相关推荐
Yo_Becky17 分钟前
【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
人工智能·pytorch·经验分享·笔记·python·程序人生·其他
DIY机器人工房35 分钟前
0.96寸OLED显示屏 江协科技学习笔记(36个知识点)
笔记·科技·stm32·单片机·嵌入式硬件·学习·江协科技
ONETHING_CLOUD_21 小时前
电脑系统重装有什么用?
经验分享·科技·计算机·电脑·数码
国科安芯1 小时前
【AS32系列MCU调试教程】SPI调试的常见问题解析
单片机·嵌入式硬件·性能优化·硬件架构·硬件工程
会的全对٩(ˊᗜˋ*)و2 小时前
【数据挖掘】数据挖掘综合案例—银行精准营销
人工智能·经验分享·python·数据挖掘
future14122 小时前
每日问题总结
经验分享·笔记
MeshddY4 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
m0_555762904 小时前
STM32常见外设
stm32·单片机·嵌入式硬件
森焱森4 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机
循环过三天4 小时前
3-1 PID算法改进(积分部分)
笔记·stm32·单片机·学习·算法·pid