×
单片机 > 单片机程序设计 > 详情

STM32的RS485调试过程记录

发布时间:2020-06-05 发布时间:
|

RS485是半双工,RS422是全双工。

A接A,B接B,不要交叉。

RS485标准是4根线,定义如下:

RO: Receiver Output: If A > B by 200mV, RO will be high;If A < B by 200mV, RO will be low.2

/RE:  接收器输出使能。当RE为低电平时,RO有效;当RE为高电平时,RO为高阻状态。

RI: Driver Input. A low on DI forces output Y low and output Z high. 

Similarly, a high on DI forces output Y high and output Z low.

DE: DI enable(enable input(read)).

实际上接三根线就可以了。RO/RE用一根线。

但在工程实践中,一般都只有D+/D-或A/B两根线,如何实现双工通信呢?答案就是:通过不同的命令码来区分。

举例:

读温控器开关: 01(addr) 03(type:read) 0001(reg-addr) 0001(读长度) D5CA(CRC16)

写温控器开关: 01(addr) 06(type:write) 0001(reg-addr) 0001(写的值) 19CA (CRC16)



调试中碰到的问题:

问题1:

先是:received invalid  response to Modbus query

之后很快变成:message time out

原因:485标准定义是5v电平,485设备供电用DC-5V,但STM32用的是DC-3.3V。这样通信就不可靠。

解决:没有换接口电平转换芯片,只是把上下拉电阻去掉了。



问题2:

STM32一次只能接收一个字节!!

原因:STM32接收中断是比较关键的,解决了中断接收的问题,就可以接收多个字节。



一些调试过程的打印:

FreeRTOS 7.6.0 for STM32F030

Build date: Aug  4 2017 15:08:22

The current time is :  08:08:08 

The current alarm is :  08:08:50 

rs485 send[8]:

010300000001840A

uart2 recv[5]:

01 83 02 C0 F1 //



rs485 send[]:

010300010001D5CA

uart2 recv[7]:

01 03 02 00 01 79 84 



rs485 read val=0x0001=1

holleywell,ret=1





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项