在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            串口速率,我拿什么識(shí)別你?

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

              芯片自

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

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

              int AutoBaud(unsigned long *pulRatio){

              long lPulse, lValidPulses, lTemp, lTotal;

              volatile long lDelay;

              // 配置systick,將其值設(shè)定為最大值;

              HWREG(NVIC_ST_RELOAD) = 0xffffffff;

              HWREG(NVIC_ST_CTRL) = NVIC_ST_CTRL_CLK_SRC | NVIC_ST_CTRL_ENABLE;

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

              HWREG(GPIO_PORTA_BASE + GPIO_O_IBE) = _RX;

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

              HWREG(NVIC_EN0) = 1;

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

              while(g_ulTickIndex < MIN_EDGE_COUNT)

              {

              }

              // 計(jì)算systick采樣下來的值,對(duì)溢出進(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)計(jì)算兩個(gè)連續(xù)脈沖之間的寬度

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

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

              lTemp = (long)g_pulDataBuffer[lPulse];

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

              if(lTemp < 0) {

              lTemp *= -1;

              }

              // 驗(yàn)證兩個(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è)有效脈沖,就可以計(jì)算UART速率

              if(lValidPulses == 7) {

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

              lTotal += (long)g_pulDataBuffer[lPulse];

              *pulRatio = lTotal >> 1;

              // 返回成功標(biāo)識(shí)

              return(0);

              }

              }

              // 檢測(cè)失敗

              return(-1);

              }

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


            上一頁 1 2 下一頁

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉