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é)、半字或字)。
在 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)建工程
- 使用 STM32CubeMX 選擇 STM32G474RET6 創(chuàng)建工程。然后選擇 CRC 外設(shè),點擊"Activated"選項。本例的"Input Data Format"參數(shù)配置為"Words",其他參數(shù)保持默認(rèn),這里大家在實際應(yīng)用中可以根據(jù)自己需求進行配置,這里 CRC 外設(shè)已經(jīng)配置完畢。
- 找到 DMA 外設(shè)。點擊"Add"添加 DMA Request,并選擇"MemToMem"模式。配置保持默認(rèn)即可,Mode 設(shè)置為"Normal"。要注意"Dst Memory"不要勾選,因為CRC_DR 寄存器的地址是固定的。這里的"Data Width"配置為 Byte、Half Word 或者Word 都可以,本示例中配置為 Word。
- 配置 DMA 中斷。在"NVIC"里面 Enable "DMA1 channel1 global interrupt",注意這里與你使用的 DMA 相關(guān),本例中使用的是 DMA1。
- 然后點擊"GENERATE CODE"即可生成代碼。
4、小結(jié)
本文對通過 DMA 配合 CRC 應(yīng)用從原理上進行了可行性分析,并且介紹了如何實現(xiàn)這個過程,希望能對讀者有所幫助。