通讯接口应用笔记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次左右的訪問,沒有出現丟包和錯誤,穩定性也基本可以保證。
歡迎關注:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的通讯接口应用笔记2:MAX3160实现多协议通讯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android和linux操作系统的区别
- 下一篇: 宝塔php开启zip组建,宝塔面板如何开