關(guān)于硬件IIC_PEC的PEC的CRC校驗的疑問

使能EVT里面的IIC_PEC的demo,我們直接修改原先的例程的,我現(xiàn)在讀到了從機的數(shù)據(jù)并且讀到了PEC是正確的;

如下圖:

image.png

但是如果我們往從機里面寫數(shù)據(jù),則會出現(xiàn)一下情況

image.png

很明顯是卡在了PEC發(fā)送數(shù)據(jù)之后,而且PEC不正確是0,正確應(yīng)該是CRC8=0xDC;

這個PEC是應(yīng)該是硬件計算的,我使能就行,但不知道為啥我的使能了,但發(fā)出來的PEC是0不對,并且在發(fā)完00阻塞

void?myiic_write_word(uint8_t?command,?uint8_t?*txdata)
{
????uint8_t?i?=?0;
????uint8_t?wdata[4]={0};
????wdata[0]=0x44;
????wdata[1]=0x02;
????wdata[2]=txdata[0];
????wdata[3]=txdata[1];
????while?(I2C_GetFlagStatus(I2C2,?I2C_FLAG_BUSY)?!=?RESET)
????????;
????I2C_GenerateSTART(I2C2,?ENABLE);?//?Start

????while?(!I2C_CheckEvent(I2C2,?I2C_EVENT_MASTER_MODE_SELECT))
????????;
????I2C_Send7bitAddress(I2C2,?BQ_ADDERSS,?I2C_Direction_Transmitter);?//?address

????while?(!I2C_CheckEvent(I2C2,?I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
????????;

????while?(i?<?5)
????{
????????if?(i?<?4)
????????{
????????????if?(I2C_GetFlagStatus(I2C2,?I2C_FLAG_TXE)?!=?RESET)
????????????{
????????????????I2C_SendData(I2C2,?wdata[i]);
????????????????i++;
????????????}
????????}
????????if?(i?==?4)
????????{
????????????if?(I2C_GetFlagStatus(I2C2,?I2C_FLAG_TXE)?!=?RESET)
????????????{
????????????????I2C_TransmitPEC(I2C2,?ENABLE);
????????????????i++;
????????????}
????????}
????}

????while?(!I2C_CheckEvent(I2C2,?I2C_EVENT_MASTER_BYTE_TRANSMITTED))
????????;
????I2C_GenerateSTOP(I2C2,?ENABLE);
}

代碼如上;我如果注釋掉

while?(!I2C_CheckEvent(I2C2,?I2C_EVENT_MASTER_BYTE_TRANSMITTED))

那么就不會卡在這里;請大佬解惑謝謝


我這里提供原裝盒子往從機寫數(shù)據(jù)參考

image.png

沒事了,解決了


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频