<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32-串口實驗學習筆記

          STM32-串口實驗學習筆記

          作者: 時間:2016-11-23 來源:網(wǎng)絡 收藏
          USART1_IRQHandler(void)函數(shù):

          當串口1發(fā)生了相應的中斷,就會跳到改函數(shù)執(zhí)行。這里設計了一個小小的接收協(xié)議(系統(tǒng)并未定義):通過這個函數(shù),配合一個數(shù)組USART_RX_BUF[ ],一個接收狀態(tài)寄存器USART_RX_STA實現(xiàn)對串口的數(shù)據(jù)的接收管理。USART_RX_BUF[ ]最大值為64,也就是一次接收的數(shù)據(jù)最大不能超過64字節(jié)。USART_RX_STA是一個接收狀態(tài)寄存器,其各位的定義如表所示:

          本文引用地址:http://www.ex-cimer.com/article/201611/320442.htm

          (注意:這個是作者設計的協(xié)議,怎樣判斷串口接收一組數(shù)據(jù)完畢?由于每次接收的數(shù)據(jù)長度不一樣,少的就3個8位數(shù)據(jù),多的時候有十多個,這個數(shù)據(jù)個數(shù)是不定的,且沒規(guī)律的數(shù)據(jù),有什么好的方法讓它接收完整?

          協(xié)議的設計思路如下:

          當接收到從電腦發(fā)過來的數(shù)據(jù),把接收到的數(shù)據(jù)保存在 USART_RX_BUF 中,同時在接收狀態(tài)寄存器(USART_RX_STA)中計數(shù)接收到的有效數(shù)據(jù)個數(shù),當收到回車(0X0D,0X0A)的第一個字節(jié) 0X0D時,標志位即第六位置1,計數(shù)器將不再增加,等待 0X0A的到來,而如果 0X0A 沒有來到,則認為這次接收失敗,重新開始下一次接收。如果順利接收到 0X0A,則標記 USART_RX_STA的第七位,這樣完成一次接收,并等待該位被其他程序清除,從而開始下一次的接收,而如果遲遲沒有收到 0X0D,那么在接收數(shù)據(jù)超過 64 個了,則會丟棄前面的數(shù)據(jù),重新接收。由于這個寄存器是作者定義,我們理解時可能容易迷糊,其實這個跟普通寄存器類似,只不過是作者定義了一個8位數(shù),規(guī)定了它每位的定義,前兩位是兩個個標志位,后六位用來計數(shù),這樣就好理解了。函數(shù)代碼如下:

          [cpp]view plaincopy
          1. voidUSART1_IRQHandler(void)
          2. {
          3. u8res;
          4. if(USART1->SR&(1<<5))//接收到數(shù)據(jù)USART1應該是作者定義的一個結構體,內含各個寄存器
          5. {
          6. res=USART1->DR;
          7. if((USART_RX_STA&0x80)==0)//接收未完成
          8. {
          9. if(USART_RX_STA&0x40)//接收到了0x0d
          10. {
          11. if(res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始
          12. elseUSART_RX_STA|=0x80;//接收完成了
          13. }else//還沒收到0X0D
          14. {
          15. if(res==0x0d)USART_RX_STA|=0x40;
          16. else
          17. {
          18. USART_RX_BUF[USART_RX_STA&0X3F]=res;
          19. USART_RX_STA++;
          20. if(USART_RX_STA>63)USART_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收
          21. }
          22. }
          23. }
          24. }
          25. }

          其實我們可以不用協(xié)議法



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();