串口接收大數據包的問題
串口總結
串口如何接收大數據經過幾天的搜索和查證現總結一下。舉例來說單片機內存只有512KB,而我們要接收一包1M的圖片數據并送至液晶屏LCD顯示。很顯然單片機的內存不足1M如果接收完在處理,肯定會使單片機崩潰,如果我們開辟一個512字節大小的Buffer,用串口中斷接收數據,可以循環使用Buffer200多次才能將一包接收過來。這個時候,我們可以spiflash將每一包buffer數據寫到Flash,等1M數據接收完后再從FLASH里讀出來處理數據。但這種方案要求Flash容量必須足夠大,如果串口接收的數據不是一種的話發的很頻繁的話,也容易很快將Flash報廢,他的讀寫次數只有10完次對同一頁的讀寫時,并且還要考慮到速度和價錢問題。
另一種方式就是不使用外部Flash直接對數據進行處理,這種方式我們經理告訴我叫做透傳(需要查證)。就是接收完一個buffer512個字節后,產生一個標志位置1,表示一包接收完,這個時候我們開啟另一個定時器中斷定時查詢標志位,如果標志位為1,我們將數據提取出來,送至LCD顯示,當然這里有個細節要求,需要LCD發送數據足夠快,數據送完后,串口中斷才會接收,也就是處理數據的速度要比串口接收數據的速度快,我們也可以適當調低串口波特率,降低速度,如果是9600,算法如下一包數據有起始位,結束位,數據位共10個,9600/10=960,也就是一秒接收960個字節,1MS接收0.96個字節,也就是說1Ms多一點就一個字節,而處理的速度要在1MS內完成才不會被中斷打斷。
串口如何接收大數據經過幾天的搜索和查證現總結一下。舉例來說單片機內存只有512KB,而我們要接收一包1M的圖片數據并送至液晶屏LCD顯示。很顯然單片機的內存不足1M如果接收完在處理,肯定會使單片機崩潰,如果我們開辟一個512字節大小的Buffer,用串口中斷接收數據,可以循環使用Buffer200多次才能將一包接收過來。這個時候,我們可以spiflash將每一包buffer數據寫到Flash,等1M數據接收完后再從FLASH里讀出來處理數據。但這種方案要求Flash容量必須足夠大,如果串口接收的數據不是一種的話發的很頻繁的話,也容易很快將Flash報廢,他的讀寫次數只有10完次對同一頁的讀寫時,并且還要考慮到速度和價錢問題。
另一種方式就是不使用外部Flash直接對數據進行處理,這種方式我們經理告訴我叫做透傳(需要查證)。就是接收完一個buffer512個字節后,產生一個標志位置1,表示一包接收完,這個時候我們開啟另一個定時器中斷定時查詢標志位,如果標志位為1,我們將數據提取出來,送至LCD顯示,當然這里有個細節要求,需要LCD發送數據足夠快,數據送完后,串口中斷才會接收,也就是處理數據的速度要比串口接收數據的速度快,我們也可以適當調低串口波特率,降低速度,如果是9600,算法如下一包數據有起始位,結束位,數據位共10個,9600/10=960,也就是一秒接收960個字節,1MS接收0.96個字節,也就是說1Ms多一點就一個字節,而處理的速度要在1MS內完成才不會被中斷打斷。
評論