1. 程式人生 > >stm32校驗和計算的問題

stm32校驗和計算的問題

常用的通訊中,經常會有一些校驗方法,比如DHT22的單匯流排協議。在這裡插入圖片描述
根據參考手冊,只需要計算

if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])

就可以了,但是!!!

對於stm32來說,其計算結果可能不是想象中的那樣,舉個例子,buf0-4的值都為0x80,那麼和就是0x200,至少對於stm32來說,結果是0x00000200,而buf[4]的值是0,那麼0x200和0相等嗎?
所以這個判斷不成立,就得不到我們想要的值。
只需要在判斷計算的時候加一個變數強制轉換,或者對256取模就可以了。

if((u8)(buf[0]+buf[1]+buf[2]+buf[3])==buf[
4]) { *humi=(buf[0]*256+buf[1])/10; *temp=(buf[2]*256+buf[3])/10; }
if(((buf[0]+buf[1]+buf[2]+buf[3])%256)==buf[4])
        {
            *humi=(buf[0]*256+buf[1])/10;
            *temp=(buf[2]*256+buf[3])/10;
        }