前言
STM32全系列產(chǎn)品都具有CRC外設(shè),對CRC的計算提供硬件支持,為應(yīng)用程序節(jié)省了代碼空間。CRC校驗值可以用于數(shù)據(jù)傳輸中的數(shù)據(jù)正確性的驗證,也可用于數(shù)據(jù)存儲時的完整性檢查。在IEC60335中,也接受通過CRC校驗對FLASH的完整性進行檢查。在對FLASH完整性檢查的應(yīng)用中,需要事先計算出整個FLASH的CRC校驗值(不包括最后保存CRC值的字節(jié)),放在FLASH的末尾。在程序啟動或者運行的過程中重新用同樣的方法計算整個FLASH的CRC校驗值,然后與保存在FLASH末尾的CRC值進行比較。
EWARM從v5.5版本之后開始支持STM32芯片的CRC計算。前面所說的計算整個FLASH的CRC校驗值并保存在FLASH末尾的過程,可以在IAR中完成。通過配置EWARM的CRC計算參數(shù),自動對整個FLASH空間進行CRC計算,并將計算結(jié)果放到FLASH的末尾。本文中將介紹的就是如何配置IAR的CRC參數(shù),使之與STM32的CRC硬件模塊保持一致。本文中的例子都基于STM32F072進行。
STM32的CRC外設(shè)CRC校驗值的計算采用多項式除法,可以通過除數(shù)和被除數(shù)進行異或運算實現(xiàn)。這種方法非常適合通過硬件電路來實現(xiàn)。使用STM32CRC外設(shè)時,你要考慮的內(nèi)容包括:采用哪個CRC生成多項式,輸入數(shù)據(jù)(要進行校驗的數(shù)據(jù))和初始值。
1.生成多項式默認使用CRC32多項式:0x4C11DB7
部分芯片支持可編程的多項式,比如STM32F3,STM32F0,STM32L0
2.初始值STM32的CRC初始值默認為0xFFFFFFFF,STM32F3,STM32F0,STM32L0系列可以修改初始值
3.輸入/輸出數(shù)據(jù)的反轉(zhuǎn)STM32F3,STM32F0,STM32L0系列還提供了對輸入/輸出數(shù)據(jù)進行反轉(zhuǎn)的功能。默認不對輸入數(shù)據(jù)和輸出數(shù)據(jù)進行位反轉(zhuǎn)
· 對輸入數(shù)據(jù)的位反轉(zhuǎn)操作可以設(shè)置為按字節(jié)/半字 /字為單元進行操作。例如輸入數(shù)據(jù)為0x1A2B3C4D, o 每個字節(jié)內(nèi)逐位反轉(zhuǎn),結(jié)果是0x58D43CB2 o 每半字內(nèi)逐位反轉(zhuǎn),結(jié)果是0xD458B23C o 每個字長內(nèi)逐位反轉(zhuǎn),結(jié)果是0xB23CD458· 對輸出數(shù)據(jù)的位反轉(zhuǎn)。 o 例如輸出數(shù)據(jù)為0x11223344,反轉(zhuǎn)后為0x22CC4488
IAR的CRC配置
1.修改Link文件指定checksum在FLASH中的存儲位置,在Link文件中增加下面語句。
該語句指定將CRC的值放在FLASH的末尾位置。是整個FLASH空間的末尾,不是應(yīng)用程序的代碼末尾。這樣,CRC值的位置就是固定的。不會隨代碼大小而變化。
2.配置Checksum頁面的參數(shù)
IAR Checksum頁說明(v6.4及以上)
IAR的checksum頁面分為兩個部分。第一部分,也就是紅線圈出的部分。定義了FLASH中需要計算CRC的范圍和空閑字節(jié)填充值。剩下的部分,就是對checksum計算參數(shù)的設(shè)定部分。 Checksum size :選擇checksum的大?。ㄗ止?jié)數(shù)) Alignment:指定checksum的對齊方式。不填的話默認2字節(jié)對齊。
Algorithm:選擇checksum的算法 Complement:是否需要進行補碼計算。選擇“Asis”就是不進行補碼計算。 Bit order:位輸出的順序。MSB first,每個字節(jié)的高位在前。LSB first,每個字節(jié)的低位在前。 Reverse byte order within word: 對于輸入數(shù)據(jù),在一個字內(nèi)反轉(zhuǎn)各個字節(jié)的順序。 Initial value: checksum計算的初始化值 Checksum unit size :選擇進行迭代的單元大小,按8-bit,16-bit還是32-bit進行迭代。
3.STM32 CRC外設(shè)使用默認配置時IAR的配置STM32CRC外設(shè)的配置:
POLY= 0x4C11DB7(CRC32) Initial_Crc = 0Xffffffff 輸入/輸出數(shù)據(jù)不反轉(zhuǎn) 輸入數(shù)據(jù):0x08000000~0x0801FFFB。(最后4個字節(jié)用來放計算出的CRC值)
具體使用中我們可以根據(jù)實際應(yīng)用需求參照上面介紹做相應(yīng)配置即可。
-
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
356005 -
IAR
+關(guān)注
關(guān)注
5文章
352瀏覽量
36681 -
C語言編程
+關(guān)注
關(guān)注
6文章
90瀏覽量
21106
原文標題:如何在IAR中配置CRC參數(shù)
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論