通讯接口应用笔记2:MAX3160实现多协议通讯

  在一些应用需求中,我们需要对外部提供串行通讯端口,但这些端口所通讯的目标设备各有不同,接口协议也有RS232以及RS485和RS422多种。面对这种情况,我们当然可以同时设计多个串口以适应不同需要,但无疑对硬件资源是一种浪费。我们希望能够动态配置接口类型以适应不同需求,这一篇中我们就来讨论使用MAX3160实现这样的多协议接口通讯的问题。

1、原理简述

  MAX3160是一款可编程RS232、RS485和RS422多协议收发器。可以通过引脚配置来实现双通道RS-232,单通道的RS-485和RS-422以及带硬件流控制的单通道RS-232接口。MAX3160采用独特的低压差发送输出级和内部双电荷泵结构,在3V到5.5V的单电源供电时,可满足RS-232和RS-485以及RS-422的接口协议要求。其引脚定义及封装如下:

  从上述的引脚定义中我们可以知道, 我们可以通过RS485/RS232、HDPLX等引脚来确定接口的工作模式。当RS485/RS232和HDPLX引脚配置为低电平时,MAX3160工作在RS-232模式。当RS485/RS232引脚配置在高电平时,HDPLX引脚为高电平工作在RS485模式,HDPLX引脚为低电平工作在RS422模式。官方给出的配置方式如下图所示:

  我们在应用MAX3160时,根据我们的应用需求来配置RS485/RS232和HDPLX引脚就能得到我们想要的接口模式。我们也可以通过MCU来控制这些引脚以便在需要时动态修改接口模式。

2、应用设计

  有了前面关于MAX3160的基础知识,我们来根据需求设计我们的需要的应用。在官方给出的数据手册中提供了了一个应用参考,在其中能实现带硬件流控制的RS-232接口和RS-422之间的切换电路图:

  在上述电路图中,虽然阐述了接口模式切换的原理,但我们计划的应用并没有这么复杂。在我们的应用需求中,我们希望可以实现RS-232和RS-485接口的动态切换,我们只需要一组RS-232接口也没有RS-422的应用需求,同时我们也不考虑硬件流控制。在应用于RS-485模式时,我们需要使用15脚来控制RS-485的收发方向,而且在RS-485和RS422模式下第7脚是不使用的,所以我们可以设计相关的应用如下图:

  在上述电路图中,我们实现了RS-232和RS-485的切换,我们通过MCU来控制RS485/RS232引脚和HDPLX引脚以实现动态切换。

3、设计验证

  我们设计了MAX3160动态切换RS-232和RS-485的接口电路,至于是否能够正确的运行还需要进行验证。我们设计简单的应用软件来验证一下上述的电路设计是否正确。

  首先我们来验证RS-232接口模式。在RS-232接口模式下,我们需要将RS485/RS232引脚设置为低电平,并且将HDPLX引脚也设置为低电平。我们在MCU程序中配置如下:

  MCEF_RS232_ALLOW(); //配置为RS232模式

  MCEF_FULLDUPLEX_ALLOW(); //全双工

  接下来我们来验证一下RS-485接口模式。在RS-485接口模式下,我们需要将RS485/RS232引脚设置为高电平,并且将HDPLX引脚也设置为高电平。我们在MCU程序中配置如下:

  MCEF_RS485_ALLOW(); //RS485模式

  MCEF_HALFDUPLEX_ALLOW(); //半双工

  MCEF_RECIEVE_ALLOW(); //接收

  其他的配置如校验位、波特率等是完全一样的。在这次的应用中,我们设置波特率为115200,8位数据位,1位停止位,无校验的模式。具体配置如下:

/* UART5初始化 */
static void UART5_Init_Configuration(void)
{huart5.Instance = UART5;huart5.Init.BaudRate = 115200;huart5.Init.WordLength = UART_WORDLENGTH_8B;huart5.Init.StopBits = UART_STOPBITS_1;huart5.Init.Parity = UART_PARITY_NONE;huart5.Init.Mode = UART_MODE_TX_RX;huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart5.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart5) != HAL_OK){Error_Handler();}/*启用串口接收中端*/__HAL_UART_ENABLE_IT(&huart5,UART_IT_RXNE);
}

  我们在应用层采用Modbus RTU协议,对于RS-485接口和RS-232接口,这部分是没有区别的。我们在设计中实现了一个94个保持寄存器的从站。

4、小结

  我们在配置为RS-232模式和RS-485模式时,分别使用RS-232接口和RS-485接口与电脑相连,并使用Modbus主站软件读取下位机的数据,在两种模式下除了接口选择不一样外,其它都是一样的。获取到的数据都是完全正确的,说明电路设计本身是可以运行的。

  我们在两种模式下分别运行了一段时间,每种模式大约进行了3000次左右的访问,没有出现丢包和错误,稳定性也基本可以保证。

欢迎关注:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机速度曲线规划1:梯形速度曲线设计与实现

电机驱动是很常见的应用,在很多系统中我们都会碰到需要改变电机的速度以实现相应的控制功能,这就涉及到电机速度曲线规划的问题。在这篇中我们就来简单讨论一下电机的梯形曲线规划的问题。 1、基本原理 梯形速度曲线控制算法是工业控制领域应用最为广泛…

文件系统应用笔记之一:FatFS在STM32F4上的移植

在实现如U盘文件读写,SD卡的文件读写等工作时,我们往往需要一个文件系统来支持我们的工作。特别在一些MCU应用中,文件系统的加入能明显改善系统交互的友好性。在这一篇中,我们就来讨论FatFS文件系统在STM32F4上的移植和应用。 1、…

通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。 1、…

电机速度曲线规划2:S形速度曲线设计与实现

电机驱动是很常见的应用,在很多系统中我们都会碰到需要改变电机的速度以实现相应的控制功能,这就涉及到电机速度曲线规划的问题。在这篇中我们就来简单讨论一下电机的S型曲线规划的问题。 1、基本原理 S型速度曲线控制算法是工业控制领域另一种常用的加…

USB应用开发笔记之一:STM32上实现USB主机读写U盘

在项目应用中,经常会有对外交换数据的需求。USB接口读写U盘无疑是一种颇为方便的选择。在这一篇中,我们就来讨论如何在STM32上实现USB主机读写U盘文件的方法。 1、应用概述 在我们的产品上有这样一个需求,希望通过大容量的U盘存取数据。我们…

Modbus协议栈综合实例设计

自我们开源了我们的Modbus协议栈之后,就一直有朋友来信说希望提供示例。这次我们整理了几个例子以供参考。 1、应用实例规划 在这次的实例中,我们使用的目标板拥有一个以太网接口、一个RS232串行接口和一个RS485串行接口,所以我们规划实现&a…

ThreadX应用开发笔记之二:移植ThreadX到STM32H7平台

前面我们将ThreadX成功移植到了STM32F4平台,但这只是我们的部分应用。我们希望将ThreadX的优势发挥到我们的更多应用中,所以在这一篇中我们就来实现将ThreadX移植到STM32H7平台中。 1、前期准备 在开始将ThreadX移植到STM32H7平台之前,我们需…

外设驱动库开发笔记31:S-Modlue远红外气体传感器驱动

在气体分析类产品中,我们经常会用到远红外气体传感器。我们就在碳氢类气体成分分析中使用了S-Modlue远红外气体传感器。接下来,我们将讨论S-Modlue远红外气体传感器驱动的设计与实现。 1、功能概述 S-MODULE EVO 使用非分散红外检测技术NDIR&#xff0c…

外设驱动库开发笔记32:HLPM025K3 PM2.5传感器驱动

现在人们对大气环境及室内环境都比较关注。PM2.5在生活中也是常见的词汇。在有些产品中就要求检测PM2.5的数值。检测PM2.5的手段多种多样,在要求不高时我们通常可以采用激光模块。在这一篇中,我们将讨论HLPM025K3 PM2.5传感器驱动的设计与实现。 1、功能…

外设驱动库开发笔记33:LCD1602液晶显示屏驱动

LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。在这一章我们就来讨论LCD1602液晶显示屏驱动的设计与实现。 1、功能概述 LCD1602液…

滤波器开发之四:基于算术平均的中值滤波器

在信号采集系统中,除了我们感兴趣的数据外,难免会有一些来自于环境的干扰信号。但我们总希望我们得到的数据是纯净而真实的,为了达到这个目标,我们不得不想办法去除这些干扰信号,于是滤波器就成为我们必不可少的帮手。…

LwIP应用开发笔记之十一:LwIP带操作系统UDP服务器

我们已经实现了在FreeRTOS系统上的LwIP的移植工作,但只是简单的在系统平台上跑了起来。我们还希望能做更多的事情,这一节我们就在FreeRTOS系统上实现基于LwIP的UDP服务器。 1、UDP协议简述 UDP协议全称是用户数据报协议,在网络中它与TCP协议…

滤波器开发之五:基于算术平均的限幅滤波器

通过AD采集数据时,我们总是希望采集到的数据是纯净而真实的,而实际上环境中存在太多的干扰信号,为了让我们得到的数据尽可能地接近实际值,我们需要降低这些干扰信号的影响。所以软件实现的数字滤波器应运而生,这一篇我…

外设驱动库开发笔记34:OLED显示屏驱动

现在OLED显示屏在嵌入式系统中应用的越来越多。对于一些显示信息不太复杂,以显示信息为主的需求,我们一般会选择OLED显示屏。在这一篇中,我们将讨论OLED显示屏驱动的设计与实现。 1、功能概述 从使用的情况来说,较为常用的是0.96…

外设驱动库开发笔记35:迪文触摸屏驱动

有些时候嵌入式系统也需要显示更为复杂的图形,需要更丰富的数据展示。为此,我们需要更大,色彩更丰富,带触屏的显示屏,当然性价比更高就最好了。在我们的项目中遇到此类需求,我们有时会选择DWIN触摸屏。在本…

快速实现一个室内空气质量检测仪

冬天我们大多会关闭门窗,而依靠暖通空调设备来维持室内温度。而在保证居室温度的同时,我们也希望保持居室内大气环境的健康度。鉴于此,我们设计了一个简单的室内空气质量检测器。 1、系统概述 我们依靠暖通空调设备来维持室内温度、湿度和通…

外设驱动库开发笔记36:NTC负温度系数热电阻测温驱动

在嵌入式产品中,温度检测非常常见。在成本比较敏感而精度要求较低时,NTC电阻是个不错的选择。在这一篇中,我们将讨论如何和设计并实现一个通用的NTC驱动,以便在后续的项目中更方便的复用。 1、功能概述 NTC是指随温度上升电阻呈指…

外设驱动库开发笔记37:S1336-5BQ光敏二极管作为光度计驱动

光敏二极管能够实现很多应用,用于光度检测即是其一。我们在一些产品中就曾使用S1336-5BQ光敏二极管进行光度值检测。所以在本篇中,我们将讨论如何设计并实现S1336-5BQ光敏二极管用于光度检测的驱动。 1、功能概述 根据相关的资料,光电二极管…

PID控制器改进笔记之六:改进PID控制器之参数设定

前面我们发布了一系列PID控制器相关的文章,包括经典PID控制器以及参数自适应的PID控制器。这一系列PID控制器虽说实现了主要功能,也在实际使用中取得了良好效果,但还有很多的细节部分可以改进以提高性能和灵活性。这篇中我们来讨论改进PID控制…

软件设计开发笔记1:基于状态机的程序设计

在编码实现的过程中,我们会经常使用到条件判断结构,而且使用起来很方便。但是在需要转移的状态比较多,或是条件比较复杂时,我们就可能需要很长的条件判断结构来处理。不过,过于复杂的条件判断结构会给代码的编写和维护…