stm32f103 IIC控制器 卡在while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

使用stm32f103+rt-thread1.1.0

使用硬件IIC控制器

应该是官方的i2c_ee代码 读取24LC02的

不挂总线直接测试的时候会卡死在

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));这句话上

挂上总线,将I2C1的PB6 PB7外接上拉电阻拉高之后,打开

#define RT_USING_I2C_BITOPS
#define RT_I2C_BIT_DEBUG
就能通过了……,这个还需要仔细研究

然后就是延时的事情了,太快了也不好使

尤其是read的时候,加点rt_kprintf语句反而好使了

 

IIC初始化的时候要注意需要下面的代码

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  I2C_InitTypeDef  I2C_InitStructure; 
  GPIO_InitTypeDef  GPIO_InitStructure; 

  /* Configure I2C1 pins: SCL and SDA */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* I2C configuration */
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
  I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
  I2C_InitStructure.I2C_OwnAddress1 = I2C1_SLAVE_ADDRESS7;
  I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
  I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;
  
  /* I2C Peripheral Enable */
  I2C_Cmd(I2C1, ENABLE);
  /* Apply I2C configuration after enabling it */
  I2C_Init(I2C1, &I2C_InitStructure);

 

经过调试,很重要的一点,对于硬件IIC控制器,每次读Read之前都要重新初始化一次IIC~~
 

你可能感兴趣的:(stm32f103 IIC控制器 卡在while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));)