触摸屏使用485通讯 协议为Freemodbus 板子是STM32F407IGT6
移植完成后发现触摸屏一直显示通讯超时,检查硬件连接发现485正负极接反了。纠正后触摸屏显示通讯错误。
用串口调试助手查看报文:
触摸屏发:01 03 00 09 00 01 54 08
触摸屏收:01 03 02 27 0F E3 F0 (CRC校验错误 )
正确报文: 01 03 02 27 0F E3 B0
所以一直认为是CRC校验程序出错导致触摸屏显示通讯错误。
检查Modbus的CRC程序后发现程序无误。
实际原因是在串口使能的程序中,Modbus发送接收功能之间的转换过快,导致板子数据没发完就关闭了发送功能。实际上程序CRC校验是正确的,只是在我们看到的报文中,CRC校验是一串未发完的数,屏幕收到的也是一串未发完的数,导致通讯失败。
决解方法:增加发送接收功能转换的延时时长,使得数据完全发送完之后再转换成接收功能