正点原子-90136 发表于 2013-3-17 23:15:51

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十九章 485实验

 <a name="_Toc342394260">29.1 485 简介
485(一般称作RS485/EIA-485)是隶属于OSI模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232大不一样。用缆线两端的电压差值来表示传递信号。RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。
RS485的特点包括:
1)              接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2~6)V
表示;逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL 电路连接。   
2)              传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输
       速度可达100Kbps。
3)              抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力
增强,即抗噪声干扰性好。
4)              传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)
一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。
RS485推荐使用在点对点网络中,线型,总线型,不能是星型,环型网络。理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有终接电阻的话,会使得较快速的发送端产生多个数据信号的边缘,导致数据传输出错。485推荐的连接方式如图29.1.2所示:
http://www.openedv.com/upload/2013/3/17/6067f2c3b04bd32eb00521dbd6eeac1e_231.jpg
图29.1.2 RS485连接

 
       在上面的连接中,如果需要添加匹配电阻,我们一般在总线的起止端加入,也就是主机和设备4上面各加一个120Ω的匹配电阻。
由于RS485具有传输距离远、传输速度快、支持节点多和抗干扰能力更强等特点,所以RS485有很广泛的应用。
战舰STM32开发板采用SP3485作为收发器,该芯片支持3.3V供电,最大传输速度可达10Mbps,支持多达32个节点,并且有输出短路保护。该芯片的框图如图29.1.2所示:
http://www.openedv.com/upload/2013/3/17/915d2ac9cf046114fee65c6f330c40e6_82.jpg
图29.1.2 SP3485框图
       图中A、B总线接口,用于连接485总线。RO是接收输出端,DI是发送数据收入端,RE是接收使能信号(低电平有效),DE是发送使能信号(高电平有效)。
本章,我们通过该芯片连接STM32的串口2,实现两个开发板之间的485通信。本章将实现这样的功能:通过连接两个战舰STM32开发板的RS485接口,然后由KEY0控制发送,当按下一个开发板的KEY0的时候,就发送5个数据给另外一个开发板,并在两个开发板上分别显示发送的值和接收到的值。
本章,我们只需要配置好串口2,就可以实现正常的485通信了,串口2的配置和串口1基本类似,只是串口的时钟来自APB1,最大频率为36Mhz。
<a name="_Toc342394262">29.3 软件设计
打开上一章的工程,首先在HARDWARE文件夹下新建一个RS485的文件夹,然后新建一个rs485.c和rs485.h的文件保存在RS485文件夹下,并将RS485文件夹加入头文件包含路径。
打开rs485.c文件,输入如下代码:
#include "sys.h"               
#include "rs485.h" 
#include "delay.h"
#ifdef EN_USART2_RX    //如果使能了接收        
//接收缓存区       
u8 RS485_RX_BUF;    //接收缓冲,最大64个字节.
//接收到的数据长度
u8 RS485_RX_CNT=0;  
void USART2_IRQHandler(void)
{
       u8 res;        
<span style="background-color: #e5e5e5"><span style="font-size: small">       if(USART2->SR&(1
页: [1]
查看完整版本: 【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十九章 485实验