• 資料介紹
    • 1、概述
    • 2、原理
    • 3、實現(xiàn)
    • 4、小結(jié)
  • 資料預(yù)覽
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1500 如何通過DMA配合CRC功能

03/06 15:45
636
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1500 如何通過DMA配合CRC功能

762.19 KB

1、概述

STM32 的 CRC 外設(shè)是用來實現(xiàn) CRC 計算的硬件單元,硬件實現(xiàn) CRC 計算相對于軟件算法實現(xiàn)來說,可以大大提高運算速度。CRC 計算單元具有單個 32 位讀/寫數(shù)據(jù)寄存器(CRC_DR)。它用于輸入新數(shù)據(jù)(寫訪問)并保存以前的 CRC 計算結(jié)果(讀訪問)。當(dāng) DMA用作數(shù)據(jù)傳輸處理器時,可以極大地減輕 CPU 負(fù)荷。本文以 STM32G474 為例,介紹如何通過 DMA 配合 CRC 計算,以供讀者參考。

2、原理

2.1. 時間上的可能性

單次 DMA 傳輸包括兩個 AHB 傳輸階段,通過 DMA AHB 總線 master 實現(xiàn):

  • 通過內(nèi)部當(dāng)前外設(shè)/存儲器地址寄存器進行尋址,從外設(shè)數(shù)據(jù)寄存器或存儲器單元中讀取單個數(shù)據(jù)(字節(jié)、半字或字)。
  • 通過內(nèi)部當(dāng)前外設(shè)/存儲器地址寄存器進行尋址,向外設(shè)數(shù)據(jù)寄存器或存儲器單元中寫入單個數(shù)據(jù)(字節(jié)、半字或字)。

在 AHB 總線上一次讀+寫就至少需要 4 個 AHB 時鐘周期,這就已經(jīng)可以滿足 CRC 單次計算所需的時間。所以單次 DMA 數(shù)據(jù)傳輸之后即可進行下次數(shù)據(jù)傳輸(背靠背傳輸),無需額外等待。

3、實現(xiàn)

這里以 NUCLEO-G474RE 為例進行介紹,這里不對基本操作做過多介紹,只介紹與

DMA 和 CRC 相關(guān)的配置部分,詳細(xì)配置可參考附件。

3.1. 創(chuàng)建工程

  1. 使用 STM32CubeMX 選擇 STM32G474RET6 創(chuàng)建工程。然后選擇 CRC 外設(shè),點擊"Activated"選項。本例的"Input Data Format"參數(shù)配置為"Words",其他參數(shù)保持默認(rèn),這里大家在實際應(yīng)用中可以根據(jù)自己需求進行配置,這里 CRC 外設(shè)已經(jīng)配置完畢。
  2. 找到 DMA 外設(shè)。點擊"Add"添加 DMA Request,并選擇"MemToMem"模式。配置保持默認(rèn)即可,Mode 設(shè)置為"Normal"。要注意"Dst Memory"不要勾選,因為CRC_DR 寄存器的地址是固定的。這里的"Data Width"配置為 Byte、Half Word 或者Word 都可以,本示例中配置為 Word。
  3. 配置 DMA 中斷。在"NVIC"里面 Enable "DMA1 channel1 global interrupt",注意這里與你使用的 DMA 相關(guān),本例中使用的是 DMA1。
  4. 然后點擊"GENERATE CODE"即可生成代碼。

4、小結(jié)

本文對通過 DMA 配合 CRC 應(yīng)用從原理上進行了可行性分析,并且介紹了如何實現(xiàn)這個過程,希望能對讀者有所幫助。

資料預(yù)覽

相關(guān)推薦