加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

STM32 DMA串口接收到數(shù)組,數(shù)組元素順序錯(cuò)亂怎么辦

12/12 10:42
476
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

提問(wèn):

配置DMA循環(huán)模式,使用HAL_UART_Receive_DMA(&huart1,buffer,4)函數(shù)將串口數(shù)據(jù)循環(huán)發(fā)送到4個(gè)元素的buffer數(shù)組內(nèi),上位機(jī)20ms發(fā)送一次數(shù)據(jù)。理論上講上位機(jī)發(fā)送數(shù)據(jù)的數(shù)量和順序都是固定的——比如AABA,可是現(xiàn)在有干擾——有一次上位機(jī)多發(fā)送了一個(gè)數(shù)據(jù)——變成了CAABA,根據(jù)DMA循環(huán)原理,存到數(shù)組里的數(shù)據(jù)就變成了AAAB——并且還是根據(jù)DMA循環(huán)原理——數(shù)組里的數(shù)據(jù)至此之后永遠(yuǎn)都是AAAB,如何才能讓它重新變成AABA呢?有沒有辦法能找到DMA自動(dòng)遞增的那個(gè)指針?把那個(gè)自動(dòng)遞增指針重新給它置零?

最新回答

  • 通常,我們做IAP設(shè)計(jì)時(shí)使用 兩個(gè)相對(duì) 獨(dú)立的工程,分別是BOOTLOADER和APPLICATION區(qū)。
    前者重點(diǎn)是接收固件代碼、完成Flash編程。后者通常是實(shí)際的用戶功能性應(yīng)用程序代碼。

    顯然,很多外設(shè),比方UART/TIMER/GPIO以及核外設(shè)NVIC,可能在BOOT區(qū)和APP區(qū)都會(huì)用到。

    但各用各的,配置及初始化也是根據(jù)當(dāng)前工程需要具體配置,外設(shè)配置、變量定義跟在另外一個(gè)
    運(yùn)行區(qū)沒有關(guān)聯(lián)。

    具體點(diǎn)說(shuō),即使同一個(gè)UART,BOOT區(qū)可以配置8bit 115200,APP區(qū)可以配置為7位 9600。兩個(gè)代碼區(qū)的UART收發(fā)
    緩沖定義其實(shí)也是各自定義、各不相干。

    一般來(lái)講,中斷矢量表位置也是各定義各的。即不同代碼區(qū)的中斷矢量入口地址都是相互獨(dú)立的。以UART中斷服務(wù)程序?yàn)槔?br /> 即使服務(wù)程序代碼一樣,發(fā)生中斷事件時(shí),中斷服務(wù)程序的入口是不一樣 的。其中,Cortex-M0核芯片稍微特殊點(diǎn),另當(dāng)別論。

    Bootloader中的全局變量和靜態(tài)變量在跳轉(zhuǎn)到APP后不再有效,因?yàn)锳PP會(huì)重新初始化自己的全局變量和靜態(tài)變量。反之亦然。

    不過(guò),如果說(shuō)在當(dāng)前代碼區(qū)使用了動(dòng)態(tài)內(nèi)存分配(例如malloc),跳轉(zhuǎn)到另一代碼區(qū)后,這些內(nèi)存估計(jì)仍然占據(jù)著內(nèi)存

    空間,我們可以在跳轉(zhuǎn)前先行釋放這些內(nèi)存。

  • 將DMA配置為循環(huán)模式,這樣DMA會(huì)在緩沖區(qū)滿時(shí)自動(dòng)回到緩沖區(qū)的開始處繼續(xù)接收數(shù)據(jù)。這種方法適用于連續(xù)數(shù)據(jù)流的接收,可以避免數(shù)據(jù)丟失。
    使用兩個(gè)緩沖區(qū),當(dāng)一個(gè)緩沖區(qū)正在被處理時(shí),DMA可以繼續(xù)在另一個(gè)緩沖區(qū)中接收數(shù)據(jù)。這樣可以避免因處理數(shù)據(jù)不及時(shí)而導(dǎo)致的數(shù)據(jù)覆蓋問(wèn)題。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜