a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 手機與無線通信 > 設計應用 > 基于RS-485總線的多主機通信方法

基于RS-485總線的多主機通信方法

作者:馬志強 楊海明 王蘇毅 時間:2015-12-28 來源:電子產品世界 收藏
編者按:針對RS-485總線多個節點之間無法自由通信的問題,介紹一種多主機通信方法,以探討總線接口電路和組網方式,并通過設計通信協議和規劃通信過程,完成相關程序設計。此方法在某裝備模擬項目中得到應用,取得了預期的效果。

3.2.2 接收方工作流程

本文引用地址:http://www.j9360.com/article/284991.htm

  處理一:報文過濾。通過報文頭部,判斷收到的報文是否為其它節點發給本節點,如果不是則不予處理。

  步驟二:報文校驗。對發給本節點的報文進行幀校驗,如果有錯誤,則發“FCS錯誤”報文,并將已收到報文丟棄,如果校驗正確則發“確認接收”報文。

  步驟三:報文處理。對正確接收的報文進行分析處理。

4 程序設計

  程序設計中主要對初始化程序、中斷接收程序、報文發送程序、報文處理程序等程序分別進行設計。

4.1 初始化程序

  初始化程序主要完成MCU和收發器管腳的初始化,并開啟串口接收中斷。

  void InitDev(void)

  {

  RCC_Configuration();//配置系統時鐘,使能各外設時鐘

  Init_485();//配置485管腳,并預置為接收使能

  SysTick_Init(1000);//初始化系統滴答

  GLCD_init();//初始化TFT屏

  UART3Init();//對USART3進行串口參數設置、中斷配置,開啟接收中斷

  }

4.2 中斷接收程序

  中斷接收程序主要對符合數據幀格式的報文進行接收,根據報文中的目的節點過濾掉發給其它節點的報文,并對報文進行幀校驗,最后設置相應的標識位,供接收數據處理程序使用。

  void USART3_IRQHandler(void)

  {

  if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET)

  {

  u8 temp;

  USART_ClearITPendingBit(USART3,USART_IT_RXNE);

  temp=USART3->DR;

  //以下對收到的字符進行處理

  ……

  為避免對方快速發送多組報文,使接收方來不及處理而導致丟失報文,我們采取雙緩存的方式,即設置兩個接收緩存區,輪流存儲接收到的報文,對緩存區的占用情況設置標志位。

  char F_REC;//緩存區存儲標志

  char buf_index;//當前待處理的緩存區號

  u8 *buf_rev1;//接收緩存區1

  u8 *buf_rev2;//接收緩存區2

  u8 DataIn[128];//臨時存儲區

  u8 dataNums;//已收到的數據長度

  ……

  if((F_REC==0) || (F_REC==0x10))

  {

  //緩存區為空,或只有緩存區2被占用

  buf_rev1=(u8 *)malloc(dataNums);

  memcpy(buf_rev1,&DataIn,dataNums);

  if(buf_index==0) buf_index=1;

  F_REC|=0x01; //緩存區1已占用

  }

  else if(F_REC==0x01)

  {

  //只有緩存區1被占用

  ……

  }

  else if(F_REC==0x11)

  {

  //緩存區已滿

  ……

4.3 報文發送程序

  報文發送程序主要是將任意長度的報文發送到總線上。由于485總線通信始終在接收/發送之間切換,為保證總線可靠工作,狀態切換時應做適當延時,等總線狀態穩定后,再進行數據的收發。具體方法是在數據發送狀態下,先將485_DIR置“1”,延時2ms,再發送數據,數據發送完成后,延時2ms,直接將485_DIR置“0”。這種處理可有效提高總線的穩定性,增強數據傳輸的可靠性。延時時間的取值與波特率有關,波特率越小,延時應越大。

  ……

  RS_485_TX_EN;//485發送使能

  RS485_Delay(2);//延時2ms

  for (i=0; i

  {

  USART_SendData(USART3, data[i]);

  while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);

  }

  /*RS485_Delay(2);*/

  RS_485_RX_EN;//485接收使能

  4.4 報文處理程序

  為了保證中斷接收程序始終能快速響應對方發來的數據,我們把報文處理程序放在中斷之外,以免程序處理當前報文用時過長,影響下一組報文的接收。在主程序中通過對接收標志位的判斷來調用報文處理程序,根據接收報文內容的不同給出相應的響應。

  int main(void)

  {

  ……

  while(1)

  {

  ……

  if(F_REC>0)

  {

  if(buf_index==1) DealData(buf_rev1,buf_len1);

  if(buf_index==2) DealData(buf_rev2,buf_len2);

  }

5 結語

  本文中介紹了一種通信的485總線通信實現方法,該方法適用于工作環境相對惡劣、隨機通信需求較高的場合,目前已應用到某模擬訓練系統,經兩年多的使用,系統運行穩定可靠。在具體實踐中,對于工作條件較好時,為提高效率可對進行精簡設計,如縮短幀結構、簡化通信過程等,藉此可減少總線占用時間,縮短節點響應時間,達到更為理想的通信效果。

參考文獻:

  [1]陳鐵軍,謝春萍. PC機與RS 485總線多機串行通信的軟硬件設計[J].現代電子技術,2007(5):103-105

  [2]吳桂林 鄭建勇. RS485上下位機多機通信網絡系統設計[J].微計算機信息,2008,24(12-3):112-113

  [3]潘群,向軍,王琳.串行通信的設計與應用[J].常州工學院學報,2009,22(3):38-42

  [4]魏金文,馬維華,吳僑. 的多機通信方案探究[J]. 單片機與嵌入式系統應用,2012,10:76-78

  [5]郝濤,陸宣博.基于RS485主從串口通訊協議的設計[J].裝備制造技術,2013,3:38-40

  [6]胡文濤.一種基于協議的提高RS-485實時性的方法[J]. 現代電子技術, 2013,36(18):10-12

  [7]周建章,趙穎.基于RS- 485主從的改進[J].電子質量,2011,1:23-25


本文來源于中國科技期刊《電子產品世界》2016年第1期第45頁,歡迎您寫論文時引用,并注明出處。


上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉