485接口

news/2024/11/23 4:41:31/

485接口

串口
串口是一种接口标准,它规定了接口的电气标准,简单说只是物理层的一个标准。没有规定接口插件电缆以及使用的协议,所以只要我们使用的接口插件电缆符合串口标准就可以在实际中灵活使用,在串口接口标准上使用各种协议进行通讯及设备控制。典型的串行通讯标准是RS232和RS485,它们定义了电压,阻抗等,但不对软件协议给予定义。
RS232接口缺陷
(1) 接口的信号电平值较高(+/-12V),易损坏接口电路的芯片。
(2) 传输速率较低,在异步传输时,波特率为20Kbps。
(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4) 传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。
而485(一般称作RS485/EIA-485)是隶属于OSI模型物理层的电气特性规定为2线,半双工,多点通信的标准。它的电气特性和RS-232大不一样。用缆线两端的电压差值来表示传递信号。RS485仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。
485特点
(1)接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2-6)V表示;逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片。
(2)传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速度可达100Kbps。
(3)抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
(4)传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。

RS485推荐使用在点对点网络中,线型,总线型,不能是星型,环型网络。理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声,而且线移需要双端的电压差。没有终接电阻的话,会使得较快速的发送端产生多个数据信号的边缘,导致数据传输出错。485推荐的连接方式:
在这里插入图片描述
485转换芯片

收发器SP3485在这里插入图片描述
图中A、B总线接口,用于连接485总线。RO是接收输出端,DI是发送数据收入端,RE是接收使能信号(低电平有效),DE是发送使能信号(高电平有效)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1)R38和R40是两个偏置电阻,用来保证总线空闲时,AB之间的电压差都会大约200mV,避免总线空闲时压差不定逻辑混乱。
2)两个485接口连接,A连接A,B连接B
硬件连接时PA2(TX)用跳线帽连485RX引脚,PA3(RX)连485TX引脚。

485的使用实例

#if EN_USART2_RX   		//如果使能了接收   	  
//接收缓存区 	
u8 RS485_RX_BUF[64];  	//接收缓冲,最大64个字节.
//接收到的数据长度
u8 RS485_RX_CNT=0;   
void USART2_IRQHandler(void)
{u8 res;	    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据{	 	res =USART_ReceiveData(USART2);//;读取接收到的数据USART2->DRif(RS485_RX_CNT<64){RS485_RX_BUF[RS485_RX_CNT]=res;		//记录接收到的值RS485_RX_CNT++;						//接收数据增加1 } }  											 
} 
#endif										 
//初始化IO 串口2
//bound:波特率	  
void RS485_Init(u32 bound)
{  	 GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟//串口2引脚复用映射GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART2GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART2//USART2    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2与GPIOA3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA2,PA3//PG8推挽输出,485模式控制  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOG8GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉GPIO_Init(GPIOG,&GPIO_InitStructure); //初始化PG8//USART2 初始化设置USART_InitStructure.USART_BaudRate = bound;//波特率设置USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式USART_Init(USART2, &USART_InitStructure); //初始化串口2USART_Cmd(USART2, ENABLE);  //使能串口 2USART_ClearFlag(USART2, USART_FLAG_TC);#if EN_USART2_RX	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启接受中断//Usart2 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器、#endif	RS485_TX_EN=0;				//默认为接收模式	
}//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void RS485_Send_Data(u8 *buf,u8 len)
{u8 t;RS485_TX_EN=1;			//设置为发送模式for(t=0;t<len;t++)		//循环发送数据{while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //等待发送结束		USART_SendData(USART2,buf[t]); //发送数据}	 while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //等待发送结束		RS485_RX_CNT=0;	  RS485_TX_EN=0;				//设置为接收模式	
}
//RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void RS485_Receive_Data(u8 *buf,u8 *len)
{u8 rxlen=RS485_RX_CNT;u8 i=0;*len=0;				//默认为0delay_ms(10);		//等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了{for(i=0;i<rxlen;i++){buf[i]=RS485_RX_BUF[i];	}		*len=RS485_RX_CNT;	//记录本次数据长度RS485_RX_CNT=0;		//清零}
}

http://www.ppmy.cn/news/137280.html

相关文章

联想Z485安装64位ubantu

开始今天的正式写作之前不得不吐槽一下联想电脑&#xff0c;真的是很垃圾&#xff01;联想Z485使用的是AMD的处理器&#xff0c;性能差的很&#xff0c;更让人不能忍的是&#xff0c;居然不能正常安装64位ubantu。这个情况让那些想在自己笔记电脑上安装TensorFlow的人头都大了一…

bootmgr is conmpressed联想Z485

昨天清理磁盘空间的时候&#xff0c;手贱把驱动器给压缩了。再开机的时候就遇到了bootmgr is conmpressed。 我把解决办法发布到百度经验上了 http://jingyan.baidu.com/article/e9fb46e1566c587521f76680.html 转载于:https://www.cnblogs.com/sdadx/p/6265593.html

RS485总线详解

RS485总线详解 前言一、常见接口划分二、RS485概述&#xff08;一&#xff09;简介&#xff08;二&#xff09;接口/引脚图 三、RS485总线详解&#xff08;一&#xff09;RS485总线概述&#xff08;二&#xff09;差分传输&#xff1a;&#xff08;三&#xff09;原理图&#x…

485通信协议

485通信协议是一种广泛应用于工业自动化领域的串行通信协议&#xff0c;其主要特点是支持多节点通信、远距离传输、高速传输和抗干扰能力强。485通信协议&#xff1a; 物理层&#xff1a;485通信协议采用差分信号传输&#xff0c;即采用两个信号线&#xff08;A、B&#xff09;…

干活分享 | MAX485 系列 RS-422/RS-485 接口 IC5RS-485/RS-422 Transceivers MAX485

1.产品特征 •单5V电源 •低功耗BiCMOS •驱动器/接收器支持多点配置 •提供半双工版本 •数据速率&#xff1a;5 Mbps •ESD规格 -15kV IEC61000-4-2空气放电 -8kV人体模型 2.功能描述 MAX485是半双工差分收发器&#xff0c;满足RS-485和RS-422的要求。 RS-485标准是多…

RS485协议

RS485 电气特性 共模传输 采用共模传输方式时&#xff0c;共模噪声将会叠加在最终的输出信号上面&#xff0c;污染了原始的信号。 差模传输 而采用差模传输方式&#xff0c;则源端发出的信号与信号-相位是相反的&#xff0c;而对于共模噪声而言在/-两条线上都会存在&#xff…

伺服驱动器485通信

伺服驱动器和上位机使用485通信&#xff0c;驱动电机运行调试成功案例分享。 调试步骤如下&#xff1a; 1&#xff1a;使用汇川伺服驱动器案例分享。首先看下伺服驱动器的485通信链接方法&#xff0c;使用两根线链接&#xff0c;485 &#xff0c;485-。厂家建议GND也要连接上&a…

STM32之485通信(RS485串口编程)

目录 1.编程思路 2.代码 USART串口的库函数&#xff1a; USART_&#xff1a; AIRCR中断分组设置表&#xff1a; 1.编程思路 通过485通信来实现MCU之间的通信&#xff0c;把接收到的数据通过串口助手显示在pc端。第一是对usart1&#xff0c;usart2进行初始化&#xff0…