如何在IAR中配置CRC參數

發(fā)布時(shí)間:2017-9-6 15:33    發(fā)布者:小融一號
前言

STM32全系列產(chǎn)品都具有CRC外設,對CRC的計算提供硬件支持,為應用程序節省了代碼空間。CRC校驗值可以用于數據傳輸中的數據正確性的驗證,也可用于數據存儲時(shí)的完整性檢查。在IEC60335中,也接受通過(guò)CRC校驗對FLASH的完整性進(jìn)行檢查。在對FLASH完整性檢查的應用中,需要事先計算出整個(gè)FLASH的CRC校驗值(不包括最后保存CRC值的字節),放在FLASH的末尾。在程序啟動(dòng)或者運行的過(guò)程中重新用同樣的方法計算整個(gè)FLASH的CRC校驗值,然后與保存在FLASH末尾的CRC值進(jìn)行比較。

EWARM從v5.5版本之后開(kāi)始支持STM32芯片的CRC計算。前面所說(shuō)的計算整個(gè)FLASH的CRC校驗值并保存在FLASH末尾的過(guò)程,可以在IAR中完成。通過(guò)配置EWARM的CRC計算參數,自動(dòng)對整個(gè)FLASH空間進(jìn)行CRC計算,并將計算結果放到FLASH的末尾。本文中將介紹的就是如何配置IAR的CRC參數,使之與STM32的CRC硬件模塊保持一致。本文中的例子都基于STM32F072進(jìn)行。
STM32的CRC外設
CRC校驗值的計算采用多項式除法,可以通過(guò)除數和被除數進(jìn)行異或運算實(shí)現。這種方法非常適合通過(guò)硬件電路來(lái)實(shí)現。
使用STM32CRC外設時(shí),你要考慮的內容包括:采用哪個(gè)CRC生成多項式,輸入數據(要進(jìn)行校驗的數據)和初始值。

1.生成多項式
默認使用CRC32多項式:0x4C11DB7

部分芯片支持可編程的多項式,比如STM32F3,STM32F0,STM32L0

2.初始值
STM32的CRC初始值默認為0xFFFFFFFF,STM32F3,STM32F0,STM32L0系列可以修改初始值

3.輸入/輸出數據的反轉
STM32F3,STM32F0,STM32L0系列還提供了對輸入/輸出數據進(jìn)行反轉的功能。
默認不對輸入數據和輸出數據進(jìn)行位反轉

· 對輸入數據的位反轉操作可以設置為按字節/半字 /字為單元進(jìn)行操作。例如輸入數據為0x1A2B3C4D,
      o 每個(gè)字節內逐位反轉,結果是0x58D43CB2
      o 每半字內逐位反轉,結果是0xD458B23C
      o 每個(gè)字長(cháng)內逐位反轉,結果是0xB23CD458
· 對輸出數據的位反轉。
      o 例如輸出數據為0x11223344,反轉后為0x22CC4488
IAR的CRC配置

1.修改Link文件
指定checksum在FLASH中的存儲位置,在Link文件中增加下面語(yǔ)句。

該語(yǔ)句指定將CRC的值放在FLASH的末尾位置。是整個(gè)FLASH空間的末尾,不是應用程序的代碼末尾。這樣,CRC值的位置就是固定的。不會(huì )隨代碼大小而變化。

2.配置Checksum頁(yè)面的參數
IAR Checksum頁(yè)說(shuō)明(v6.4及以上)

IAR的checksum頁(yè)面分為兩個(gè)部分。
第一部分,也就是紅線(xiàn)圈出的部分。定義了FLASH中需要計算CRC的范圍和空閑字節填充值。
剩下的部分,就是對checksum計算參數的設定部分。
     Checksum size :選擇checksum的大。ㄗ止潝担
     Alignment:指定checksum的對齊方式。不填的話(huà)默認2字節對齊。
    Algorithm:選擇checksum的算法
     Complement:是否需要進(jìn)行補碼計算。選擇“Asis”就是不進(jìn)行補碼計算。
     Bit order:位輸出的順序。MSB first,每個(gè)字節的高位在前。LSB first,每個(gè)字節的低位在前。
     Reverse byte order within word: 對于輸入數據,在一個(gè)字內反轉各個(gè)字節的順序。
     Initial value: checksum計算的初始化值
     Checksum unit size :選擇進(jìn)行迭代的單元大小,按8-bit,16-bit還是32-bit進(jìn)行迭代。

3.STM32 CRC外設使用默認配置時(shí)IAR的配置
STM32CRC外設的配置:

    POLY= 0x4C11DB7(CRC32)
    Initial_Crc = 0Xffffffff
    輸入/輸出數據不反轉
    輸入數據:0x08000000~0x0801FFFB。(最后4個(gè)字節用來(lái)放計算出的CRC值)

本文地址:http://selenalain.com/thread-516659-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页