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

LAT1500 如何通過DMA配合CRC功能

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

LAT1500 如何通過DMA配合CRC功能

762.19 KB

1、概述

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

2、原理

2.1. 時(shí)間上的可能性

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

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

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

3、實(shí)現(xiàn)

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

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

3.1. 創(chuàng)建工程

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

4、小結(jié)

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

資料預(yù)覽

相關(guān)推薦