iic时钟速率_STM32之硬件IIC
今天主要和大家分享一下关于如何使用STM32的硬件IIC进行两个板子之间互相通信。
很多人都说STM32的硬件IIC很难用,亦或者说STM32的硬件IIC有BUG,从而放弃使用硬件IIC使用GPIO去模拟。对于简单的读取传感器数据,采用模拟的方法没有问题。但是当你需要不断的刷新LCD或者利用IIC做从机的时候,模拟的IIC显然会拖你的后腿。
下面我就和大家分享一下我是如何使用中断和DMA两种方式进行数据收发通信的。关于IIC的通信原理我就不在这里和大家讲述,大家可以参考《STM32F10X参考手册》的IIC章节进行学习。
先来说说I2C的初始化,和串口初始化没什么区别,具体步骤:
1)打开时钟;
2)初始化GPIO,配置SCL和SDA为复用开漏输出模式;
3)配置I2C模式为I2C_MOD_I2C,使能ACK,设置本机地址和通信速率,设置地址为7位模式。
4)打开I2C_IT_EVT中断,打开I2C_IT_BUF中断,如果使用DMA传输则不需要打开I2C_IT_BUF,但I2C_IT_EVT必须打开。
5)设置NVIC。
接下来我们看一下I2C的四种工作模式,分别是主发送、主接收、从发送和从接收。使用STM32的硬件I2C需要遵循《STM32F10X参考手册》中描述的事件流程。
主发送模式
今天主要和大家分享一下关于如何使用STM32的硬件IIC进行两个板子之间互相通信。 很多人都说STM32的硬件IIC很难用,亦或者说STM32的硬件IIC有BUG,从而放弃使用硬件IIC使用GPIO去模拟。对于简单的读取传感器数据,采用模拟的方法没有问题。但是当你需要不断的刷新LCD或者利用IIC做从机的时候,模拟的IIC显然会拖你的后腿。 下面我就和大家分享一下我是如何使用中断和DMA两种方式进行数据收发通信的。关于IIC的通信原理我就不在这里和大家讲述,大家可以参考《STM32F10X参考手册》的IIC章节进行学习。 先来说说I2C的初始化,和串口初始化没什么区别,具体步骤: 1)打开时钟; 2)初始化GPIO,配置SCL和SDA为复用开漏输出模式; 3)配置I2C模式为I2C_MOD_I2C,使能ACK,设置本机地址和通信速率,设置地址为7位模式。 4)打开I2C_IT_EVT中断,打开I2C_IT_BUF中断,如果使用DMA传输则不需要打开I2C_IT_BUF,但I2C_IT_EVT必须打开。 5)设置NVIC。 接下来我们看一下I2C的四种工作模式,分别是主发送、主接收、从发送和从接收。使用STM32的硬件I2C需要遵循《STM32F10X参考手册》中描述的事件流程。 主发送模式