使用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~~