国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發布時間: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.qingdxww.cn/thread-133000-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月天狠狠操 | 毛片免费毛片一级jjj毛片 | 另类av| 成年色黄大色黄大片 视频 成年日韩片av在线网站 | 亚洲一区二区免费在线观看 | 日本中文字幕第一页 | 色综合中文字幕天天在线 | 欧美影院在线观看完整版 mp4 | 国产日韩中文字幕 | 成人免费午间影院在线观看 | 青青热久麻豆精品视频在线观看 | 91入口免费网站大全 | 欧美成人aaaa免费高清 | 中文字幕一区二区三匹 | 美女视频在线观看免费网 | 免费观看成人久久网免费观看 | 欧美日韩中文一区二区三区 | 精品欧美一区视频在线观看 | 亚洲成人一级 | 99re66热这里都是精品 | 一区二区日韩欧美 | 免费黄网页 | 国产亚洲精品91 | 茄子香蕉草莓丝瓜芭乐绿巨人 | 亚洲欧美日本另类 | 青青青青久久久久国产 | www.99re.| 污视频网站免费看 | 欧美手机在线播放 | 久久91久久91精品免费观看 | 国产精品视频一区二区噜噜 | 12至16末成年毛片高清 | 91久久精品 | 国产精品自在自线 | 四虎最新地址 | 婷婷四房播客五月天 | 在线观看视频一区二区三区 | 日色网站| 久久大陆| 99热在线免费播放 | poopoo的视频丨vk |