STM32学习问题记录(8) - IIC通信

    今天重新看了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);   
}


上面仅仅为IIC的模式和引脚配置,至于读写协议一般购买外设都会赠送,有兴趣可以去研读,看起来确实比较难,但是使用起来还是十分的方便的,了解其中内部协议更有利我们今后在通信方面做到更高效率等。



猜你喜欢

转载自blog.csdn.net/vca821/article/details/80659869