STM32笔记--IIC通信
程序员文章站
2024-02-23 23:04:34
...
今天重新看了IIC的通信协议,笔者之前对IIC的具体通信方式十分含糊,使用过的IIC通信器件有lcd1602和oled,因为直接使用的是库函数,所以对IIC的驱动和配置等都很含糊,而且IIC还分硬件与模拟,这次只分析硬件,模拟IIC后续补充。
IIC具有引脚少,硬件实现简单的,可拓展性强的特点,现在被广泛使用再IC之间的通信,
IIC具有如下特点:
1.IIC有两条总线,一条双向串行总线SDL,一条串行时钟线SCL。
2.IIC可挂载多个外设,通过广播方式通信,可设置独立地址来选择通信对象。
3.有3种传输速率,100kb/s,400kb/s,3.4Mkb/s,stm32最大支持400kb/s,且400速率并不精准。
4.片上滤波器可以滤除毛刺保证信息完整。
5.连接到相同总线IC受到总线最大电容400pf限制。
IIC协议:
IIC代码配置例程(硬件IIC):
static void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
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);
}
static void I2C_Mode_Configu(void)
{
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 =I2C1_OWN_ADDRESS7;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;
I2C_Init(I2C1, &I2C_InitStructure);
I2C_Cmd(I2C1, ENABLE);
}