本文主要是介绍关于RS485通信失败的问题(忽视了使能引脚),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
如图,使用485进行串口通信时,程序一直卡在接收这句。
解决
检查串口引脚配置都没问题,因此怀疑是硬件的原因。
在RS485通信中,通常需要一个使能信号来控制半双工总线上的发送和接收状态,这个信号经常被标记为:“DE(driver enable)”或“RE(receiver enable)”。
如图所示,DE1_RS485 控制信号用来切换收发器的工作模式。当MCU需要发送数据时,会通过设置DE1_RS485为高电平来启用发送驱动器,并在数据发送完毕后将其设置为低电平以禁用发送器并启用接收器。
因为RS-485接口允许半双工通信,即同一对线不能同时发送和接收数据。因此,必须在发送和接收之间切换。
因此,DE1_RS485 默认应该是低电平(接收状态),高电平时,发送状态;低电平时,接收状态。
修改程序如下,可以正常运行:
#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 默认是高电平。
这篇关于关于RS485通信失败的问题(忽视了使能引脚)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!