stm32校驗和計算的問題
阿新 • • 發佈:2018-12-05
常用的通訊中,經常會有一些校驗方法,比如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;
}