<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    串口速率,我拿什么識別你?

    發布時間:2014-9-22 14:39    發布者:看門狗
    關鍵詞: UART , 串口 , 通信協議
    作者:jobs

        UART串口,作為單片機最常用的通訊接口已經深入每一個嵌入式工程師的腦海。UART串口有著簡單、實用的特性,嵌入式工程師常常用來將其作為調試系統的重要工具。UART串口的配置參數有很多,但是最常用,且需要修改的參數只有通訊波特速率這一個?墒沁@僅有的一個參數又常常給我們帶來許多困擾。那么,我們對于串口波特速率該如何識別呢?筆者在這里介紹三種識別串口速率的方法,供大家參考。

      UART(Universal Asynchronous serial Receiver and Transmitter)異步串行接收/發送接口,是嵌入式系統里最為重要的接口之一,它不僅用于板級芯片之間的通訊,而且應用于實現系統之間的通信和系統調度中。UART作為異步串口通信協議的一種,工作原理是將傳輸數據的每個字符一位接一位地傳輸,其字符數據幀格式如下圖所示:


      圖1 UART字符數據幀格式

      從上面圖中的幀格式可以看出,UART數據幀由1個開始同步位,1個數據字,1個結束停止位,以及可選的校驗位組成。由于UART為異步通訊,因此,其按位發送時必須嚴格遵守設定的波特率,而接收方也必須在相同的波特率下才能正確解析發送的字符數據。于是,接收方正確識別、配置波特率就相當關鍵了。下面筆者根據實際經驗介紹三種識別串口波特率的方法:

      窮舉法

      理論上,發送波特率可以設定為任意的值,但是平時我們使用的串口速率只有這么幾種數值,如圖2所示:


    圖2 常用串口波特速率

      既然知道了常用串口速率,于是我們就可以一個一個試,總會有一個是成功。當然前提是我們知道主機發送的內容是什么,否則如何才能知道串口速率正確匹配呢!這里必須注意,在設定波特率與實際波特率成倍數的情況下,是可以讀出來數據——當然,數據是錯誤的。

      示波器

      示波器被秒為電子工程師的“眼睛”,我們可以就用這雙眼睛來“看”出串口發送數據的波特率。這里我們先排除掉高端的帶有數字邏輯分析功能的示波器,因為,這樣的示波器已經遠超筆者的IQ了,不是我們本篇討論的內容。

      上一部分,我們講述了波形的幀格式,這里我們就利用波形,發送一個特殊的字符0x55(1010 1010B)。從理論上面分析,這個波形應該會產生一個按位翻轉的波形效果。圖3是筆者使用示波器采集下來的截圖:


      圖3 9600bps發送0x55波形圖

      看到圖3所示的波形圖,再加上理論分析,我們知道波形是按位翻轉,于是我們使用示波器的指針功能(cursor)來直接查看波特率。如圖3左上角的測量結果顯示,每位翻轉的頻率為9.615KHz,與我們設定的頻率9600kbps基本相符,可以確定此發送頻率為9600bps。

    芯片自識別法

      UART串口常常用來做為固件升級使用的接口,因此,其波特率要根據上位機的實際情況而定。如果環境較差時,就需要使用低波特率的通訊。這時,自動波特率識別的方法就誕生了。下面我們以TI Stellaris里bootloader里的串口波特率自動識別源程序為例進行分析:

      int UARTAutoBaud(unsigned long *pulRatio){

      long lPulse, lValidPulses, lTemp, lTotal;

      volatile long lDelay;

      // 配置systick,將其值設定為最大值;

      HWREG(NVIC_ST_RELOAD) = 0xffffffff;

      HWREG(NVIC_ST_CTRL) = NVIC_ST_CTRL_CLK_SRC | NVIC_ST_CTRL_ENABLE;

      // 打開引腳的邊沿觸發中斷

      HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = UART_RX;

      // 使能UART RXD引腳邊沿觸發中斷

      HWREG(NVIC_EN0) = 1;

      // 采集引腳邊沿中斷,兩個字節的邊沿

      while(g_ulTickIndex < MIN_EDGE_COUNT)

      {

      }

      // 計算systick采樣下來的值,對溢出進行處理

      for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){

      lTemp = (((long)g_pulDataBuffer[lPulse] -

      (long)g_pulDataBuffer[lPulse + 1]) & 0x00ffffff);

      g_pulDataBuffer[lPulse] = lTemp;

      }

      // 此循環計算兩個連續脈沖之間的寬度

      for(lPulse = 0; lPulse < (MIN_EDGE_COUNT - 1); lPulse++){

      // 精確計算兩個連續脈沖之間的寬度

      lTemp = (long)g_pulDataBuffer[lPulse];

      lTemp -= (long)g_pulDataBuffer[lPulse + 1];

      if(lTemp < 0) {

      lTemp *= -1;

      }

      // 驗證兩個邊沿的脈寬是否正確,其算法如下:

      // abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1] / PULSE_DETECTION_MULT

      // 或者

      // PULSE_DETECTION_MULT * abs(Pulse[n] - Pulse[n + 1]) < Pulse[n + 1]

      if((lTemp * PULSE_DETECTION_MULT) < (long)g_pulDataBuffer[lPulse + 1]) {

      lTotal += (long)g_pulDataBuffer[lPulse];

      lValidPulses++;

      }

      else{

      lValidPulses = 0;

      lTotal = 0;

      }

      // 7個有效脈沖,就可以計算UART串口速率

      if(lValidPulses == 7) {

      // 將最后一個脈沖加入計數器,并計算波特率

      lTotal += (long)g_pulDataBuffer[lPulse];

      *pulRatio = lTotal >> 1;

      // 返回成功標識

      return(0);

      }

      }

      // 檢測失敗

      return(-1);

      }

      UART串口有著這樣或者那樣的優點,但新興的USB接口的USB DFU功能可以更加有效替代串口來完成固件升級;性能優越的CAN總線,其硬件價格不斷下降,而且CAN總線的MAC接口更多集成在最新MCU芯片上;CAN2.0B接口正在擠壓著UART接口器件的市場;對于我們普通民眾,現在新型號電腦已經沒有DB9串口座。在殘酷的現實下,多年后也許只有我們電子工程師才會記得曾經的簡單、實用的UART串口。
    本文地址:http://www.portaltwn.com/thread-133000-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關在線工具

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷