新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2018-5-24
- 在线时间
- 8 小时
|
1金钱
其中IIC初始化的代码如下:
void IIC_Init(void)
{
I2C_InitTypeDef i2c_param;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //ê1ÄüGPIOBê±Öó
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 êä3ö¸ß
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB, &GPIO_InitStructure);
I2C_DeInit(I2C1);
i2c_param.I2C_ClockSpeed = 100000;
i2c_param.I2C_Mode = I2C_Mode_I2C;
i2c_param.I2C_DutyCycle = I2C_DutyCycle_2;
i2c_param.I2C_OwnAddress1 = 0x92;
i2c_param.I2C_Ack = I2C_Ack_Enable;
i2c_param.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_StretchClockCmd(I2C1, DISABLE);
I2C_SoftwareResetCmd(I2C1, ENABLE);
I2C_SoftwareResetCmd(I2C1, DISABLE);
I2C_Init(I2C1, &i2c_param);
I2C_Cmd(I2C1, ENABLE);
}
读取IIC值的代码如下:
u8 ReadTempture(void)
{
u8 temp;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0x92, I2C_Direction_Receiver);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
I2C_AcknowledgeConfig(I2C1, DISABLE);
while(!I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE));
temp = I2C_ReceiveData(I2C1);
I2C_GenerateSTOP(I2C1, ENABLE);
return temp;
}
问题是当发送完命令:I2C_GenerateSTART(I2C1, ENABLE)后,一直卡在标黄的代码上,没法进入主模式。有人也碰到过这种问题吗,可能会是什么原因导致的?
|
|