OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2851|回复: 1

STM32103F中I2C1没法进入主模式的问题

[复制链接]

5

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-24
在线时间
8 小时
发表于 2018-5-24 18:34:52 | 显示全部楼层 |阅读模式
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)后,一直卡在标黄的代码上,没法进入主模式。有人也碰到过这种问题吗,可能会是什么原因导致的?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-5-25 01:38:05 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 10:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表