<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 串口速率,我拿什么識別你?

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

作者:jobs 時(shí)間:2014-03-10 來(lái)源:電子產(chǎn)品世界 收藏

  芯片自

本文引用地址:http://dyxdggzs.com/article/234415.htm

  常常用來(lái)做為固件升級使用的接口,因此,其波特率要根據上位機的實(shí)際情況而定。如果環(huán)境較差時(shí),就需要使用低波特率的通訊。這時(shí),自動(dòng)波特率的方法就誕生了。下面我們以TI Stellaris里bootloader里的波特率自動(dòng)源程序為例進(jìn)行分析:

  int AutoBaud(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;

  // 打開(kāi)引腳的邊沿觸發(fā)中斷

  HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = _RX;

  // 使能UART RXD引腳邊沿觸發(fā)中斷

  HWREG(NVIC_EN0) = 1;

  // 采集引腳邊沿中斷,兩個(gè)字節的邊沿

  while(g_ulTickIndex < MIN_EDGE_COUNT)

  {

  }

  // 計算systick采樣下來(lái)的值,對溢出進(jìn)行處理

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

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

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

  g_pulDataBuffer[lPulse] = lTemp;

  }

  // 此循環(huán)計算兩個(gè)連續脈沖之間的寬度

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

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

  lTemp = (long)g_pulDataBuffer[lPulse];

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

  if(lTemp < 0) {

  lTemp *= -1;

  }

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

  // 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個(gè)有效脈沖,就可以計算UART速率

  if(lValidPulses == 7) {

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

  lTotal += (long)g_pulDataBuffer[lPulse];

  *pulRatio = lTotal >> 1;

  // 返回成功標識

  return(0);

  }

  }

  // 檢測失敗

  return(-1);

  }

  UART串口有著(zhù)這樣或者那樣的優(yōu)點(diǎn),但新興的USB接口的USB DFU功能可以更加有效替代串口來(lái)完成固件升級;性能優(yōu)越的CAN總線(xiàn),其硬件價(jià)格不斷下降,而且CAN總線(xiàn)的MAC接口更多集成在最新MCU芯片上;CAN2.0B接口正在擠壓著(zhù)UART接口器件的市場(chǎng);對于我們普通民眾,現在新型號電腦已經(jīng)沒(méi)有DB9串口座。在殘酷的現實(shí)下,多年后也許只有我們電子工程師才會(huì )記得曾經(jīng)的簡(jiǎn)單、實(shí)用的UART串口。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>