STM32 RS485串口DMA接收及发送,问题记录及调试解决
芯片型号:STM32F767IGT6、SP3485,如图1、图2所示。
图1 主芯片型号
图2 485芯片型号
开发环境:Keil uVision5、STM32CubeMX,如图3、图4所示。
图3 Keil uVision版本信息
图4 STM32CubeMX版本信息
之前与上层设备的通讯协议是基于MODBUS TCP进行地相应开发,但因为STM32F767IG芯片只有一个物理网口,并且其也不得不接入局域网。所以当局域网内有大量数据时可能导致网络阻塞,其与上层设备的通讯会不稳定,从而无法正常工作。于是乎便考虑使用基于MODBUS RTU的协议进行通讯。在开发过程中,碰到了些许问题,花费了不少时间解决,觉得有必要记录总结下。
好了,背景阐述完毕,咱们进入正题。
其实MODBUS协议从网口改为兼容串口通讯,协议部分的处理并不棘手,只要考虑如何兼容网口的MBAP报文头的处理,以及串口的CRC校验;串口通讯主要的难点在于命令帧之间的区分、应答的及时性,同时若使用RS485通讯,需要注意485芯片数据处理方向的转换,以及转换的时机。
|