这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32F407的RS485通讯控制

共2条 1/1 1 跳转至

STM32F407的RS485通讯控制

院士
2026-05-16 22:57:49     打赏

RS485通讯以硬件简单,成本低廉,在工业控制领域广泛应用。

RS485硬件原理图

RS485硬件电路图.jpg

RS485芯片

从上面的RS485原理图,我们可以清晰的看出,STM32F407控制RS485芯片需要3个GPIO,分别为Usart_TX,Usart_RX和Usart_DE引脚,其中,RX和TX引脚比较好理解——就是普通的串口外设的两个引脚。所以,我们重点讲讲Usart_DE引脚。
Usart_DE引脚是控制RS485收、发方向引脚。RS485是半双工通讯模型,同一时间仅允许收、发一个方向的数据通讯。再引申一点儿呢!RS485在同一时刻只可以一发,但可多收。下次我们讲Modbus时的“一主多从”时再详细讲这种“半双工”模型的优势与劣势。

Usart_DE引脚是拉低是控制RS485接收数据,而将其拉高是控制发送数据,那么它的时间的控制便十分关键:
1.在发送结束后,过早拉低转入接收,则尚未发送的数据无法完成发送;
2.在发送结束后,过晚拉高转入接收,则无法接收到从机回复的头部数据。
3.在准备发送前,拉高,则可以正常进入发送状态。

总之,Usart_DE引脚对时间控制十分苛刻。

STM32F407实现

STM32F407的是基于ARM公司的Cortex-M4内核,其IP设计中并没有RS485控制引脚的硬件逻辑,所以,在STM32F407中,我们需要通过软件实现来控制Usart_DE引脚,操作的关键时间点要求如下:

  1. 当STM32F407要发送数据时,我们只需要在发送前通过操作GPIO拉高Usart_DE引脚即可;

  2. 当STM32F407发送完成数据后,我们必须要等待1个字节发送时间,再操作GPIO拉低Usart_DE引脚;

其实,对于延时1个字节的发送时间要求,由于STM32F407的串口发送还有一个移位寄存器的存在,在实际项目中,我更倾向于在接收到串口发送完成中断后的时延2个字节的时间,这样,完全可以保证已经发送完成的数据一定会完整的发送出去。

实现的方式一:delay延时处理

直接延时处理。现在波特率一般最低也到了115200bps,2个字节的时间约173us。时间非常短,对于大多数的项目应用来说可以忽略不计了。但delay延时处理实现特别的简单——原地nop!

实现的方式二:状态机转换

状态机转换的架构是最稳定的,但也需要一定的技术门槛。即将发送,发送完成,延时,待发送等几个状态进行轮转。通过查看的方式处理每种状态。状态机带来的直接效果便是性能上的提升,也就是方式一里面的那173us的时长也是可以利用起来了。

总结

使用软件方式控制RS485引脚的方式还是挺多的,本文列举了两种我平时项目中常常使用的两个方案,供大家参考。也希望对大家的项目实现有所帮助。




关键词: RS485    

院士
2026-05-17 11:45:01     打赏
2楼

学习了,173us确实在较多的场景可以接受。谢谢分享。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]