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参考手册》中描述的事件流程。 主发送模式
今天主要和大家分享一下关于如何使用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参考手册》中描述的事件流程。 主发送模式
经验分享 程序员 微信小程序 职场和发展