STM32F1 硬件I2C

一个问题几天了,STM32F1硬件I2C,总是卡在while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  

后来发现 if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))是不对的,必须等待while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
 
uint8_t I2C_ReadByte(uint8_t REG_Address)
{
    uint8_t data_byte;
    //*((u8 *)0x4001080c) |=0x80; 
    while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008
 
 
    /* Send START condition */
    I2C_GenerateSTART(I2C1, ENABLE);
    //*((u8 *)0x4001080c) &=~0x80;
 
    /* Test on EV5 and clear it */
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
 
    /* Send EEPROM address for write */
    I2C_Send7bitAddress(I2C1, I2C1_MPU6050, I2C_Direction_Transmitter);
 
    /* Test on EV6 and clear it */
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
 
    /* Clear EV6 by setting again the PE bit */
    I2C_Cmd(I2C1, ENABLE);
 
    /* Send the EEPROM's internal address to write to */
    I2C_SendData(I2C1, REG_Address);  
 
    /* Test on EV8 and clear it */
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 
    /* Send STRAT condition a second time */  
    I2C_GenerateSTART(I2C1, ENABLE);
 
    /* Test on EV5 and clear it */
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
 
    /* Send EEPROM address for read */
    I2C_Send7bitAddress(I2C1, I2C1_MPU6050, I2C_Direction_Receiver);
 
    /* Test on EV6 and clear it */
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
 
    /* While there is data to be read */
    /* Disable Acknowledgement */
    I2C_AcknowledgeConfig(I2C1, DISABLE);
 
    /* Send STOP Condition */
    I2C_GenerateSTOP(I2C1, ENABLE);
    
 
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));       
    data_byte = I2C_ReceiveData(I2C1);
    I2C_AcknowledgeConfig(I2C1, ENABLE);
    return data_byte;
 
}
永不止步步 发表于10-18 15:51 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:307967个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号