STM32f407的 I2C 卡的问题 求解

2019-07-14 23:55发布

最近想用STM32F407的I2C控制从元件的寄存器,但是总是卡在一个地方,不知道为什么!!!求解啊 !!!!

下面是卡的的地方,我都标出来了,,求帮助!!!

   /*******************************************************************************
* Function Name  : I2C_WriteOneByte
* Description    : 通过指定I2C接口写入一个字节数据
* Input          : - I2Cx:I2C寄存器基址
*                  - I2C_Addr:从器件地址
*                  - addr:预写入字节地址
*                  - value:写入数据
* Output         : None
* Return         : 成功返回0
* Attention                 : None                                         
*******************************************************************************/                 
uint8_t I2C_WriteOneByte(I2C_TypeDef *I2Cx,  uint8_t I2C_Addr,   uint8_t addr,   uint8_t value)
{
    /* 起始位 */                                                  
         I2C_AcknowledgePolling(I2Cx,I2C_Addr);                                    
        while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));                                                   ////卡主的地方
          I2C_GenerateSTART(I2Cx, ENABLE);                //                  
          while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));                 
//          /* 发送器件地址(写)*/                                                                                                                  
          I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);                                         
//          while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))                ///卡住的地方                 
//        {
//                I2C_delay(100);                                                                                          
//        }                                                                                                                                             
//          /*发送地址*/                                                                                                            
          I2C_SendData(I2Cx, addr);
//        while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));                 //////卡住的地方           
//
//        /* 写一个字节*/                                                                                                                           
          I2C_SendData(I2Cx, value);                                                                                                           
//          while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));         /////卡住的地方
//          /* 停止位*/
          I2C_GenerateSTOP(I2Cx, ENABLE);
        I2C_AcknowledgePolling(I2Cx,I2C_Addr);
        I2C_delay(1000);
        return 0;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。