欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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协议:

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



相关标签: STM32 IIC