( !I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) ); #if (Address_Lenth== Address_8bit 凤求凰2022-06-07 08:25:10 ANT1M24LR16E没有响应我的I2C命令 1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){} /* Send address byte. Wait until data has been received */I2C_SendData(...
I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));如果不复用结果没问题代码 GPIO_InitTypeDef GPIO_InitStructure /* 使能与 I2C1 有关的时钟 */ RCC_APB2PeriphClockCmd (RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB,ENABLE )
当使用硬件IIC驱动EEPROM卡死在EV6事件 while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) 问题原因:在判断EV6事件的时候,EEPROM此时还在写入数据,我们发送了地址过去,但并没有产生应答 解决方法:在判断EV6事件之前加一个延时,如下图: 当使用硬件IIC主从通信主机卡死在EV6事件 该问题一般...
while(I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_MODE_SELECT) == ERROR); // EV5事件被检测到,发送设备地址(直接填入EEPROM的设备地址:EEPROM_ADDR) I2C_Send7bitAddress(EEPROM_I2C, EEPROM_ADDR, I2C_Direction_Transmitter); while(I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)...
I2C_Send7bitAddress(I2C1, _i2c_dev.addr << 1, I2C_Direction_Transmitter); break; /* EV6 */ case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED: /* EV8 */ case I2C_EVENT_MASTER_BYTE_TRANSMITTING: if (_i2c_dev.tx_len - _i2c_dev.tx_idx > 0) { ...
I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) { if ((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(11); } /*通过重新设置PE位清除EV6事件 */ I2C_Cmd(EEPROM_I2C, ENABLE); /* 发送要读取的EEPROM内部地址(即EEPROM内部存储器的地址) */ I2C_SendData(EEPROM_...
}while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//检查最近一次 I2C事件...
再来看看两个EV6事件 I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED 和 I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED,这两者的区别就是一个用于发送模式,另一个用于接受模式,发送模式为0x00070082, TRA数据单元一般产生STOP信号后清除,至于ADDR位,在I2C_CheckEvent函数里面,我们是顺序地读取了SR1和SR2寄存器,于是ADDR位被清除...
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));/* Send the EEPROM's ...
while(!I2C_ReadEventStatus(i2c,I2C_EVENT_MASTER_MODE_SELECT));//发送从设备地址 ...