您好!
我正在尝试实现 UART 通信以发送 Modbus 帧并读取响应。 当我使用 GPIO 引脚控制 RS485的 RE 和 DE 引脚时、我已使用逻辑分析仪成功测试了 RS485 Modbus 通信。 但是、我目前遇到这样一个问题、即无法通过 Launchpad 上的 Rx 引脚接收 Modbus 响应。 尝试读取读取读取字节的大小时、仅显示一个字节、且读取缓冲区看起来为空。 我的读取函数是否存在潜在问题?
代码片段:
size_t 字节 Read;
uint8_t 缓冲器[25];
void uart_test(){
//初始化 UART2参数
UART2_Params 参数;
UART2_params_init (¶ms);
params.baudrate = 9600;
params.readMode = UART2_Mode_Blocking;
params.writeMode = UART2_Mode_Blocking;
params.readReturnMode = UART2_ReadReturnMode_partial;
//打开 UART
UART2_Handle UART;
UART = UART2_OPEN (CONFIG_UART_RS485、¶ms);
//检查 UART 是否成功打开
if (uart == NULL){
//打印错误消息并相应地返回或处理错误
display_printf (display、0、0、"Error opening UART\n");
返回;
}
while (1){
GPIO_WRITE (CONFIG_GPIO_0、1);
//将 Modbus 帧写入 UART
uint8_t modbusFrame[]={0x03、0x03、0x00、0x00、0x00、 0x01、0x85、0xE8};
int32_t writeStatus = UART2_write (UART、modbusFrame、sizeof (modbusFrame)、NULL);
delayMilliseconds(8);
GPIO_WRITE (CONFIG_GPIO_0、0);
if (writeStatus <0){
//处理写入 UART 时发生的错误
display_printf (display、0、0、"Error writing to UART\n");
}
睡眠(2);
//从 UART 读取响应
uint32_t readStatus = UART2_read (UART、缓冲区、sizeof (buffer)、&bytesRead);
display_printf (display、0、0、"readbytet size %d\n"、bytesRead);
if (readStatus!= UART2_STATUS_SUCCESS){
//处理从 UART 读取时发生的错误
display_printf (display、0、0、"Error reading from UART\n");
}其他{
//在"缓冲区"中处理接收到的数据
display_printf (display、0、0、"Success reading from UART\n");
//以十六进制格式打印每个字节
display_printf (display、0、0、" data:%x\n"、buffer[1]);
display_printf (display、0、0、" data:%x\n"、buffer[2]);
display_printf (display、0、0、" data:%x\n"、buffer[3]);
display_printf (display、0、0、" data:%x\n"、buffer[4]);
display_printf (display、0、0、" data:%x\n"、buffer[5]);
display_printf (display、0、0、" data:%x\n"、buffer[6]);
display_printf(显示, 0, 0 ,"数据:%x\n", buffer[7]
}
睡眠(5);
}
//关闭 UART
UART2_Close (UART);
}
控制台日志:
readbytet 大小1
从 UART 成功读取
数据:0
数据:0
数据:0
数据:0
数据:0
数据:0
数据:0
逻辑 分析器: 
引脚 配置: 




