STM32单片机I2C通信:7个实战技巧,掌握串行通信的精髓
发布时间: 2024-07-05 13:00:48 阅读量: 138 订阅数: 41
![stm32单片机编程结构](https://wiki.st.com/stm32mpu/nsfr_img_auth.php/2/25/STM32MP1IPsOverview.png)
# 1. STM32单片机I2C通信基础
I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛用于连接微控制器和外围设备。它采用两线制传输方式,包括一条数据线(SDA)和一条时钟线(SCL),具有低成本、低功耗、易于实现等优点。
STM32单片机集成了I2C外设,支持I2C通信功能。本章将介绍I2C通信的基础知识,包括I2C总线结构、通信原理、数据传输格式和时序等,为后续的I2C通信实践和应用奠定基础。
# 2. I2C通信协议与硬件配置
### 2.1 I2C通信协议概述
#### 2.1.1 I2C总线结构和通信原理
I2C(Inter-Integrated Circuit)总线是一种串行通信协议,用于连接微控制器、传感器和其他外围设备。它采用两线制通信,包括一条数据线(SDA)和一条时钟线(SCL)。
I2C总线采用主从模式,一个主设备控制总线,多个从设备连接到总线上。主设备负责发起通信,从设备负责响应主设备的请求。
#### 2.1.2 I2C数据传输格式和时序
I2C数据传输采用8位字节格式,包括一个起始位、7个数据位、一个奇偶校验位和一个停止位。
**起始位:**低电平,表示通信开始。
**数据位:**7位数据,从最高有效位(MSB)开始传输。
**奇偶校验位:**可选择启用或禁用,用于验证数据传输的正确性。
**停止位:**高电平,表示通信结束。
I2C数据传输时序由时钟线(SCL)控制。主设备生成时钟信号,从设备根据时钟信号进行数据传输。
### 2.2 STM32单片机I2C硬件配置
#### 2.2.1 I2C外设寄存器和配置
STM32单片机中,I2C外设寄存器主要包括以下几个:
* **I2C_CR1:**控制寄存器,用于配置I2C外设的工作模式、时钟源和波特率。
* **I2C_CR2:**配置寄存器,用于配置I2C外设的中断和DMA传输。
* **I2C_OAR1:**设备地址寄存器,用于配置从设备的地址。
* **I2C_DR:**数据寄存器,用于发送和接收数据。
* **I2C_SR1:**状态寄存器,用于指示I2C外设的当前状态。
* **I2C_SR2:**状态寄存器,用于提供更多状态信息。
#### 2.2.2 I2C时钟源和波特率设置
I2C时钟源可以是APB1时钟或APB2时钟。波特率由I2C_CR2寄存器的CCRx位设置,范围为100 kbps至400 kbps。
```c
// 设置I2C时钟源为APB1时钟
RCC->CFGR |= RCC_CFGR_I2C1_SW_APB1;
// 设置I2C波特率为100 kbps
```
0
0