使能EVT里面的IIC_PEC的demo,我們直接修改原先的例程的,我現(xiàn)在讀到了從機的數(shù)據(jù)并且讀到了PEC是正確的;
如下圖:
但是如果我們往從機里面寫數(shù)據(jù),則會出現(xiàn)一下情況
很明顯是卡在了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ù)參考
熱門產(chǎn)品 :
CH339: 7端口多功能USB HUB控制器芯片