新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32F10x 學習筆記3(CRC計算單元)

        STM32F10x 學習筆記3(CRC計算單元)

        作者: 時間:2016-11-20 來源:網絡 收藏
        STM32F系列的單片機內部帶了CRC32計算單元。這個內置CRC模塊的方法使用非常簡單。其操作如下圖所示。

        本文引用地址:http://www.104case.com/article/201611/318838.htm

        圖1CRC計算單元框圖

        歸納起來有如下幾步操作:

        1. 開啟CRC單元的時鐘。RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE)
        2. 復位CRC模塊(設置CRC_CR=0x01),這個操作把CRC余數初始化為0xFFFFFFFF
        3. 把要計算的數據按逐個地寫入CRC_DR寄存器
        4. 寫完所有的數據字后,從CRC_DR寄存器讀出計算的結果

        STM32F10x StdPeriph Driver 中提供了幾個函數。

        CRC_ResetDR(void)
        用來復位CRC模塊。

        uint32_t CRC_CalcCRC(uint32_t Data)
        將一個數據寫入CRC_DR寄存器,返回值為計算結果。

        uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
        計算一個數組的CRC 值。

        uint32_t CRC_GetCRC(void)
        讀取CRC_DR寄存器的結果。

        另外,CRC 模塊中還有個獨立數據寄存器(CRC_IDR)。這是個單字節的寄存器,用于臨時存放1字節的數據,不受復位操作影響。相應的操作函數有兩個。

        void CRC_SetIDRegister(uint8_t IDValue)
        uint8_t CRC_GetIDRegister(void)
        分別是寫CRC_IDR和讀 CRC_IDR 寄存器。

        雖然STM32F 上的CRC 單元用起來很簡單,但是似乎它計算出來的結果與傳統的CRC32算法得到的結果有些不同。
        下面是個簡單的例子。
        1. #include"stm32f10x.h"
        2. intmain(void)
        3. {
        4. uint32_tj;
        5. uint32_tstr[11]={1,2,3,4,5,6,7,8,9,};
        6. SystemInit();
        7. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);
        8. CRC_ResetDR();
        9. str[9]=CRC_CalcBlockCRC(str,1);
        10. CRC_ResetDR();
        11. CRC_CalcCRC(0xA5A5A5A5);
        12. j=CRC_GetCRC();
        13. CRC_CalcCRC(j);
        14. for(;;)
        15. {
        16. }
        17. }



        關鍵詞: STM32F10xCRC計算單

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 察隅县| 旺苍县| 临邑县| 冀州市| 吴旗县| 龙南县| 包头市| 莫力| 西乌珠穆沁旗| 建宁县| 汕尾市| 宜黄县| 紫云| 海城市| 太湖县| 平度市| 瑞金市| 古丈县| 三明市| 新化县| 牡丹江市| 柯坪县| 徐水县| 英吉沙县| 三穗县| 汝阳县| 安徽省| 沧源| 驻马店市| 逊克县| 鲜城| 岫岩| 汉川市| 和田县| 康平县| 深圳市| 青铜峡市| 阿拉善右旗| 晴隆县| 牙克石市| 淅川县|