STM32单片机I2C总线通信:串行数据传输,轻松掌握
发布时间: 2024-07-04 07:37:29 阅读量: 78 订阅数: 55
(179979052)基于MATLAB车牌识别系统【带界面GUI】.zip
![STM32单片机I2C总线通信:串行数据传输,轻松掌握](https://img-blog.csdnimg.cn/c3437fdc0e3e4032a7d40fcf04887831.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiN55-l5ZCN55qE5aW95Lq6,size_20,color_FFFFFF,t_70,g_se,x_16)
# 1. I2C总线基础**
I2C(Inter-Integrated Circuit)总线是一种串行通信协议,广泛用于连接微控制器、传感器和外围设备。它具有以下特点:
* **低成本:**仅需两根信号线(时钟线SCL和数据线SDA)
* **低功耗:**支持低速通信,功耗较低
* **多主从模式:**允许多个主设备和多个从设备同时连接在总线上
I2C总线通信遵循以下协议:
* **起始条件:**主设备拉低SCL和SDA,表示通信开始
* **地址阶段:**主设备发送从设备地址,从设备响应
* **数据传输阶段:**主设备和从设备交换数据
* **停止条件:**主设备拉高SCL和SDA,表示通信结束
# 2. STM32单片机I2C通信硬件
### 2.1 I2C接口简介
I2C(Inter-Integrated Circuit)总线是一种串行通信协议,广泛应用于嵌入式系统中,用于连接微控制器和外围设备。I2C总线采用两线制通信方式,包括一条数据线(SDA)和一条时钟线(SCL)。数据线用于传输数据,时钟线用于同步通信。
I2C总线具有以下特点:
- **低成本:**只需要两条信号线,无需复杂的布线。
- **易于使用:**通信协议简单,易于实现。
- **低速率:**传输速率一般在100 kbps以下,适合于低速率数据传输。
- **多主机:**支持多主机同时连接到总线上。
### 2.2 STM32单片机I2C外设
STM32单片机内置I2C外设,提供了对I2C总线的硬件支持。I2C外设主要包括以下寄存器:
| 寄存器 | 描述 |
|---|---|
| I2C_CR1 | 控制寄存器1,用于配置I2C外设的工作模式、时钟频率等 |
| I2C_CR2 | 控制寄存器2,用于配置I2C外设的中断使能、DMA传输等 |
| I2C_OAR1 | 设备地址寄存器1,用于配置I2C外设的从机地址 |
| I2C_OAR2 | 设备地址寄存器2,用于配置I2C外设的从机地址掩码 |
| I2C_DR | 数据寄存器,用于读写I2C总线上的数据 |
| I2C_SR1 | 状态寄存器1,用于反映I2C外设的当前状态 |
| I2C_SR2 | 状态寄存器2,用于反映I2C外设的错误状态 |
#### 2.2.1 I2C寄存器结构
```
struct I2C_TypeDef {
uint32_t CR1; /*!< I2C control register 1 */
uint32_t CR2; /*!< I2C control register 2 */
uint32_t OAR1; /*!< I2C own address register 1 */
uint32_t OAR2; /*!< I2C own address register 2 */
uint32_t DR; /*!< I2C data register */
uint32_t SR1; /*!< I2C status register 1 */
uint32_t SR2; /*!< I2C status register 2 */
uint32_t CCR; /*!< I2C clock control register */
uint32_t TRISE;
```
0
0