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

LAT1500 如何通過DMA配合CRC功能

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

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é)果(讀訪問)。當 DMA用作數(shù)據(jù)傳輸處理器時,可以極大地減輕 CPU 負荷。本文以 STM32G474 為例,介紹如何通過 DMA 配合 CRC 計算,以供讀者參考。

2、原理

2.1. 時間上的可能性

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

  • 通過內(nèi)部當前外設(shè)/存儲器地址寄存器進行尋址,從外設(shè)數(shù)據(jù)寄存器或存儲器單元中讀取單個數(shù)據(jù)(字節(jié)、半字或字)。
  • 通過內(nèi)部當前外設(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)的配置部分,詳細配置可參考附件。

3.1. 創(chuàng)建工程

  1. 使用 STM32CubeMX 選擇 STM32G474RET6 創(chuàng)建工程。然后選擇 CRC 外設(shè),點擊"Activated"選項。本例的"Input Data Format"參數(shù)配置為"Words",其他參數(shù)保持默認,這里大家在實際應用中可以根據(jù)自己需求進行配置,這里 CRC 外設(shè)已經(jīng)配置完畢。
  2. 找到 DMA 外設(shè)。點擊"Add"添加 DMA Request,并選擇"MemToMem"模式。配置保持默認即可,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 應用從原理上進行了可行性分析,并且介紹了如何實現(xiàn)這個過程,希望能對讀者有所幫助。

資料預覽

相關(guān)推薦