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通讯第一次成功,第二次却卡住了