之前发了个帖子,今天上来看到好多热心 坛友做了回复。有些建议非常好!比如今天就学习了APM32E030的RS485方向控制引脚硬件自动切换功能特性。
在RS485通讯实验上,使用MCU的Uart外设,配上RS485收发芯片(如MAX485),以实现差分信号通讯传输数据,以有效抑制共模干扰带来的噪声,保证通讯数据传输正确性。为什么会有方向控制引脚?因为RS485通讯属于半双工通讯模式,即同一时刻只能接收或发送。
常见的RS485的典型电路图如下所示:
从上面的典型电路图可以看出有一个GPIO为方向控制引脚Uart_CON。其控制RS485的收发方向。在控制方向时,
1. 如果过早切换为发送模式,则接收数据将无法全部接收 。
2. 如果过早切换为接收模式,则发送数据将无法全部发送。
我上一个帖子遇到的问题就是过早切换为接收模式,导致发送的最后一个字节发送失败。这个就是我软件操作Uart_CON这个GPIO时出现的时机问题。我的解决方式是在发送完成后,再延时1ms,再切换为接收模式即可解决。
以上是我的软件控制方向引脚,但在极海APM32E030中,Uart外设集成了RS485方向控制引脚的硬件控制。这样,RS485的方向控制引脚将转由APM32E030控制,不再需要软件来操作GPIO。一方面,不再需要我们手动操作RS485的方向切换;另一方面,由硬件控制后,系统的整体性能和鲁棒性也极大提高。
这里还有另外两个寄存器也需要配置一下,USART_CTR1中的DDLEN[4:0]和DLTEN[4:0]。
DDLTEN[4:0]=16,代表一个字节的间隔。
这样,硬件将为我们在发送完成TXDATA之后的一个字节再将RS485方向控制引脚拉高,以保证发送完整。
简单说,简单了!功能交由硬件控制,软件只需要关心通讯协议了。
|