单片机
返回首页

STM32的RS485调试过程记录

2019-07-27 来源:eefocus

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


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章