STM32的RS485调试过程记录

发布者:平静宁静最新更新时间:2019-07-27 来源: eefocus关键字:STM32  RS485  调试过程 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:STM32  RS485  调试过程 引用地址:STM32的RS485调试过程记录

上一篇:基于stm32/linux系统的can总线的电机与485的全方位机器人通讯
下一篇:STM32F030 485通讯遇到的问题

推荐阅读最新更新时间:2024-11-11 15:38

STM32 自定义延时函数
在stm32调试过程中加入一个延时,有两种方式:一种是纯计数方式,另一种是使用系统计数器的方式。 现使用系统计数器产生中断的方式实现,查阅STM32的编程手册可知,STM32有一个24bit的系统计时器,并有STK_CTRL、STK_LOAD、STK_VAL、STK_CALIB寄存器供读写配置。 而CORTEX_M3有提供了一些函数可以供我们调用来控制这几个寄存器。 在编写延时函数时需要的库函数: /** brief System Tick Configuration details Initializes the System Timer and its interrupt, and sta
[单片机]
<font color='red'>STM32</font> 自定义延时函数
STM32 驱动无线NRF24L01 完成串口数据传输
2401 一个简单的SPI 接口的 2.4G 射频模块 淘宝价20¥,DIY 的17¥ ,算是廉价。 这个版本的稳定修正 http://ntn314.blog.163.com/blog/static/16174358420106211118944/ 接口CMOS电平3.3V STM32 可直接连接。接受完成 发送完成 出错 都有IRQ 低电平中断产生。程序中 我将其连接至一IO口在外部中断中处里各类事件 但也发现这种处理方式并不是特别灵活,或许直接判断更加灵活。 NRF20L01一次可以传输 1~32个字节比较灵活。最初我是根据字符串长来不停的转换每次传输的长度,这样做十分麻烦最后用截取有效串长的方法实现效果很好。
[单片机]
<font color='red'>STM32</font> 驱动无线NRF24L01 完成串口数据传输
stm32+uln2003驱动步进电机程序(28BYJ-48)
今天,接到一个任务,采用stm32驱动步进电机,已经有了驱动模块了。所以不再采用PWM方式,直接用软件编写。 我也是初学,仅供参考。 1、管脚接线 // IN4: PC9 d // IN3: PC8 c // IN2: PC7 b // IN1: PC6 a 电源接开发板电源。地接地(简直是废话)。 2、定义正转反转数组 uint16_t phasecw ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A uint16_t phaseccw ={0x0040,0x0080,0x0100,0x0200};// A-B-C-D 说明一下,数组里面的值,就是对应的GPIO口的地址。根据自己
[单片机]
STM32 FSMC总线深入研究
由于CPU与FPGA通信的需要,以及对8080总线的熟悉,首选采用了STM32的FSMC总线,作为片间通信接口。FSMC能达到16MHz的写入速度,理论上能写20fps的1024*768的图片哈哈。(当然实际上是不可能的,就算是DMA传输,数据源也跟不上,实际上刷模拟的图片每秒10fps,刷的很high)当然这不是本篇的要点,这里主要研究STM32的FSMC接口,将速度提升到极限。 1. FSMC协议分析 如下为ILI9325的8080接口的协议 CS(片选信号):低电平片选有效,高电平失能(默认为高:失能) RS(数据寄存器):低电平写寄存器,高电平写数据(默认为高:写数据)FSMC默认为低。。。。 RD(读信号)
[单片机]
<font color='red'>STM32</font> FSMC总线深入研究
stm32 字符发送函数注意点
一、发送函数 void UART2_Put_Char(u8 data) { USART_SendData(USART2, (uint16_t) data); while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!= SET) delay_10us(1); } 二、说明 1、上述代码中while循环功能是查询是否发送完成,如果没有完成则延时; 2、也就是说在进行字符串发送时,发送第二个字符时一定要注意第一个字符是否发送完成,我之前是没有这种意识的。虽然没有出过问题,但是以后要注意。
[单片机]
STM32堆和栈(Heap & Stack)及SRAM存储使用
编译一个程序,出现下面的信息: 明明程序没有什么内容,为什么变量大小就有RW+ZI=52+1836=1888字节大小了呢,就已经使用了1888字节的SRAM空间。让我们打开map文件: 可以看到每个文件所使用的SRAM大小,比如delay文件使用了4个字节,地址从0x20000014到0x20000017。其中可以看到HEAP和STACK占了大头,分别占了0x00000200和0x00000400的空间。STACK的起始地址是0x20000360,大小是0x00000400,那么最后的地址是0x20000760,刚好等于1888=0x760字节。于是我们就知道SRAM空间用来存放了什么东西了:1、各个文件中
[单片机]
<font color='red'>STM32</font>堆和栈(Heap & Stack)及SRAM存储使用
STM32仿真器ST-Link仿真
本仿真器是ST-Link ST仿真有硬件和软件仿真两种,一个是在硬件上跑,一个是软件模拟,前者真实性高,后者某些方面精确,比如计算延迟,我今天分享硬件仿真。 就是在开始的DEBUG选项出选右边的 选择好之后,进入仿真界面 进入仿真界面 有用的也就下面这一行有用 我主要讲这几个最左边RST是复位, 第二个是程序运行,第三个是停止程序运行, 四到七是程序一步一步执行的不同方式, 第八个是定位到光标程序处, 后面几个是一些逻辑窗口 这三个对应的是命令输入窗口,汇编窗口(汇编里面包含地址),标识符窗口(用来展示程序里面所有的的函数和成员变量,可以通过这里找到需要观察的变量,然后添加到窗口中,观察程序运行中变量的变化,方便调试程序)
[单片机]
<font color='red'>STM32</font>仿真器ST-Link仿真
STM32CubeMX | 37 - 使用RS485总线进行双板通信(SP3485)
本篇详细的记录了如何使用STM32CubeMX配置 STM32F407ZGT6 使用 RS485 总线与另一个开发板之间通信。 0. RS485总线协议简述 RS485总线的特点及应用场合 RS-485 通讯协议由 RS-232 协议改进而来,将物理层改为了差分信号进行传输,所以具备抗干扰能力强、传输距离远的特点,广泛应用于噪声干扰较大的工业控制环境中。 RS485总线的物理层 RS485总线网络拓扑结构如图: 其中RS485收发器的作用是将普通TTL电平信号转换为差分信号,即总线每个时刻表达的逻辑由485-A和485-B的电平共同决定,属于半双工通信,判断逻辑为:当 AB 两线间的电压差为 -6V~-2V 时表示逻辑
[单片机]
STM32CubeMX | 37 - 使用<font color='red'>RS485</font>总线进行双板通信(SP3485)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved