初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2020-3-7
- 在线时间
- 12 小时
|
程序一直卡死在红色位置,很疑惑,大神能帮我指导下吗?感激!
uint32_t count=0xFFFFF;
void Error_Test(u32 number);
void I2C_GPIOConfig(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C1_InitStruct;
GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_I2C1);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_I2C1);
u32 timeout;
//I2C引脚配置
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType=GPIO_OType_OD;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_Init(GPIOB,&GPIO_InitStruct);
//利用结构体配置I2C相关参数
I2C1_InitStruct.I2C_Ack=ENABLE;
I2C1_InitStruct.I2C_ClockSpeed=400000;
I2C1_InitStruct.I2C_DutyCycle=I2C_DutyCycle_2;
I2C1_InitStruct.I2C_Mode=I2C_Mode_I2C;
I2C1_InitStruct.I2C_OwnAddress1=0XEB;
I2C1_InitStruct.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
I2C_Init(I2C1,&I2C1_InitStruct);
I2C_Cmd(I2C1,ENABLE);
}
void I2C_WriteByteConfig(u32 data,u8 Write_addr)
{
u32 timeout=count;
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)==1)
{
if((timeout--)==0)
Error_Test(0);
}
I2C_GenerateSTART(I2C1,ENABLE);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)==ERROR)
{
if((timeout--)==0)
Error_Test(1);
}
I2C_Send7bitAddress(I2C1,0XA0,I2C_Direction_Transmitter);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)==ERROR)
{
if((timeout--)==0)
Error_Test(2);
}
I2C_SendData(I2C1,Write_addr);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)==ERROR)
{
if((timeout--)==0)
Error_Test(3);
}
I2C_SendData(I2C1,data);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)==ERROR)
{
if((timeout--)==0)
Error_Test(4);
}
I2C_GenerateSTOP(I2C1,ENABLE);
}
void I2C_ReadByte(u32* pbuffer,u8 Readaddr)
{
u32 timeout=count;
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)==1)
{
if((timeout--)==0)
Error_Test(5);
}
I2C_GenerateSTART(I2C1,ENABLE);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)==ERROR)
{
if((timeout--)==0)
Error_Test(6);
}
I2C_Send7bitAddress(I2C1,0XA1,I2C_Direction_Transmitter);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)==ERROR)
{
if((timeout--)==0)
Error_Test(7);
}
I2C_Cmd(I2C1,ENABLE);
I2C_SendData(I2C1,Readaddr);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED))
{
if((timeout--)==0)
Error_Test(8);
}
I2C_GenerateSTART(I2C1,ENABLE);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)==ERROR)
{
if((timeout--)==0)
Error_Test(9);
}
I2C_Send7bitAddress(I2C1,0XA0,I2C_Direction_Receiver);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)==ERROR)
{
if((timeout--)==0)
Error_Test(10);
}
I2C_AcknowledgeConfig(I2C1,DISABLE);
timeout=count;
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)==RESET)
{
if((timeout--)==0)
Error_Test(11);
}
(*pbuffer)=I2C_ReceiveData(I2C1);
I2C_GenerateSTOP(I2C1,ENABLE);
}
void Error_Test(u32 number)
{
printf("Code Error! The code number is %d",number);
}
|
|