stm32和pcf8591(a/d,d/a)通讯(按键控制),第一次按下去没问题,第二次就在这while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); 卡住了,求帮助一下 
              
                        以下是按下按键后执行的函数: 
             
             
            /******************************************************************************* 
            * Function Name  : u8 PCF8591_Read(void) 
            * Description    : Receive data from channal 0 of PCF8591. 
            * Input          : None 
            * Output         : None 
            * Return         : None 
            *******************************************************************************/ 
            u8 PCF8591_Read(void)//6 
            { 
                    u8 temp; 
                     
                    /*----- Transmission Phase -----*/ 
              printf("Generate Start I2C ...\r\n"); 
                     
                    /* Send I2C1 START condition */ 
              I2C_GenerateSTART(I2C1, ENABLE); 
              /* Test on I2C1 EV5 and clear it */ 
              while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //第二次卡住的地方@@@@@@@@ 
                    printf("1...\r\n"); 
                     
                    /* Send PCF8591 slave Address for write */ 
              I2C_Send7bitAddress(I2C1, 0x90, I2C_Direction_Transmitter);//Receiver 
              /* Test on I2C1 EV6 and clear it */ 
              while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));// RECEIVER 
                    printf("2...\r\n"); 
                     
                    /* Send data */ 
              I2C_SendData(I2C1, 0x00); 
                    /* Test on I2C1 EV8 and clear it */ 
                    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
                    printf("3...\r\n"); 
                     
                    /* Send I2C1 STOP Condition */ 
              I2C_GenerateSTOP(I2C1, ENABLE); 
                    printf("4...\r\n"); 
                     
                    /* Send I2C1 START condition */ 
              I2C_GenerateSTART(I2C1, ENABLE); 
              /* Test on I2C1 EV5 and clear it */ 
              while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));  
                    printf("5...\r\n"); 
                     
                    /* Send PCF8591 slave Address for read */ 
              I2C_Send7bitAddress(I2C1, 0x91, I2C_Direction_Receiver); 
              /* Test on I2C1 EV6 and clear it */ 
              while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));  
                    printf("6...\r\n"); 
                     
                    temp=I2C_ReceiveData(I2C1); 
                     
                    I2C_AcknowledgeConfig(I2C1, ENABLE); 
                    I2C_GenerateSTOP(I2C1, ENABLE); 
                     
                    return temp; 
            } 
              
             
             |  
  | 
RE:I2C和pcf8591通讯第一次成功,第二次却卡住了
回复:I2C和pcf8591通讯第一次成功,第二次却卡住了
RE:I2C和pcf8591通讯第一次成功,第二次却卡住了
回复:I2C和pcf8591通讯第一次成功,第二次却卡住了
如果是因为printf,那为什么第一次成功,第二次却是失败了呢
u8 temp;
//在这里增加一个语句:
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY))
{
;
}
// 读的时候要先进行判忙的工作
/*----- Transmission Phase -----*/
printf("Generate Start I2C ...\r\n");
/* Send I2C1 START condition */
I2C_GenerateSTART(I2C1, ENABLE);
/* Test on I2C1 EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //第二次卡住的地方@@@@@@@@
printf("1...\r\n");
RE:I2C和pcf8591通讯第一次成功,第二次却卡住了
RE:I2C和pcf8591通讯第一次成功,第二次却卡住了
RE:I2C和pcf8591通讯第一次成功,第二次却卡住了
RE:I2C和pcf8591通讯第一次成功,第二次却卡住了