主题中讨论的其他器件:BQ24735、 BQ4050
我有一个 MSP-EXP432P401R 通过 eUSCI0_B 连接到 BQ24735和 BQ4050的 SMBus。 通过扩展 I2C 驱动程序库示例、我能够让微控制器与两个器件进行通信。 但是、我偶尔会遇到 I2C_masterSendSingleByte 卡在无限 while 循环中的问题[同时(!(EUSCI_B_CMSIS (moduleInstance)->rIFG.r & UCTXIFG)) ]导致微控制器停止。
具体而言、我尝试读取 BQ4050电池状态、然后读取 BQ4050相对充电状态(尽管我尝试以相同的结果反转呼叫)。 在第二次读取时、从器件地址被写入(已确认)、然后出现停止条件、而不是写入请求的寄存器地址。
以下是读取函数:
uint8_t ReadU1 (uint8_t 地址) { uint8_t 值= 0; MAP_I2C_setSlaveAddress (EUSCI_B0_BASE、0x0B); //设置要读取的地址 MAP_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit 模式); MAP_I2C_masterSendSingleByte (EUSCI_B0_BASE、地址); //验证前一条消息的完成情况 while (MAP_I2C_masterIsStopSent (EUSCI_B0_BASE)); 值= MAP_I2C_masterReceiveSingleByte (EUSCI_B0_BASE); 返回值; }
您看到的示波器
您希望看到的位置
什么可能导致停止条件早于预期发生?


