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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 串口接收大數(shù)據(jù)包的問題

          串口接收大數(shù)據(jù)包的問題

          作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
          學(xué)習(xí)stm32有1年多之久了,但是串口接收數(shù)據(jù)雖然接觸的很多了,但是最近突然遇到串口中斷要接收好幾百KB乃至幾兆的數(shù)據(jù),卻一時半會想不想出設(shè)計方案來。還是學(xué)的不透徹,明天好好研究總結(jié)一下!

          串口總結(jié)

          串口如何接收大數(shù)據(jù)經(jīng)過幾天的搜索和查證現(xiàn)總結(jié)一下。舉例來說單片機內(nèi)存只有512KB,而我們要接收一包1M的圖片數(shù)據(jù)并送至液晶屏LCD顯示。很顯然單片機的內(nèi)存不足1M如果接收完在處理,肯定會使單片機崩潰,如果我們開辟一個512字節(jié)大小的Buffer,用串口中斷接收數(shù)據(jù),可以循環(huán)使用Buffer200多次才能將一包接收過來。這個時候,我們可以spiflash將每一包buffer數(shù)據(jù)寫到Flash,等1M數(shù)據(jù)接收完后再從FLASH里讀出來處理數(shù)據(jù)。但這種方案要求Flash容量必須足夠大,如果串口接收的數(shù)據(jù)不是一種的話發(fā)的很頻繁的話,也容易很快將Flash報廢,他的讀寫次數(shù)只有10完次對同一頁的讀寫時,并且還要考慮到速度和價錢問題。

          另一種方式就是不使用外部Flash直接對數(shù)據(jù)進行處理,這種方式我們經(jīng)理告訴我叫做透傳(需要查證)。就是接收完一個buffer512個字節(jié)后,產(chǎn)生一個標志位置1,表示一包接收完,這個時候我們開啟另一個定時器中斷定時查詢標志位,如果標志位為1,我們將數(shù)據(jù)提取出來,送至LCD顯示,當然這里有個細節(jié)要求,需要LCD發(fā)送數(shù)據(jù)足夠快,數(shù)據(jù)送完后,串口中斷才會接收,也就是處理數(shù)據(jù)的速度要比串口接收數(shù)據(jù)的速度快,我們也可以適當調(diào)低串口波特率,降低速度,如果是9600,算法如下一包數(shù)據(jù)有起始位,結(jié)束位,數(shù)據(jù)位共10個,9600/10=960,也就是一秒接收960個字節(jié),1MS接收0.96個字節(jié),也就是說1Ms多一點就一個字節(jié),而處理的速度要在1MS內(nèi)完成才不會被中斷打斷。


          評論


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

          關(guān)閉
          看屁屁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); })();