《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.10 I2C接口使用实验

写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.10 I2C接口使用实验,讲解I2C通信的STM32CubeMX配置和程序设计方法
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1

4.10 I2C接口使用实验

4.10.1. 实验任务

  1. 掌握STM32G431 IIC通信使用步骤,驱动开发板上的24C02存储芯片(官方例程HAL_08_EE)及可编程电阻MCP4017。(HAL_09_RES)
  2. 功能扩展:

4.10.2. 硬件连接

在这里插入图片描述
在这里插入图片描述
  由上图可以看出,I2C总线使用的是引脚PB6和PB7,总线上挂接了两个设备,分别是存储芯片M24C02和可编程电阻MCP4017。

4.10.3. I2C通讯原理解析

1. I2C总线通讯

  I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
  I2C 通讯只需要两根信号线来完成信息交换。常见的串行通信接口对比:
在这里插入图片描述
  I2C 通讯设备之间的常用连接方式见下图:
在这里插入图片描述
(1) 它是一个支持多设备的总线。可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。一个I2C理论上最多可挂载127个设备,但除去保留地址,最多可挂载112个设备。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。多主机通讯时,采用仲裁方式决定谁占用总线。
(4) 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模下可达 3.4Mbit/s,但目前大多I2C 设备尚不支持高速模式。
  在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。由SCL、SDA按照时序关系进行表述,如下时序图。
在这里插入图片描述
  例如,开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,则开始传送数据。时钟线SCL为高电平时,数据线SDA上的一个由低到高的上升沿变化被定义为停止条件。根据该通信协议规则,则可以编写出对应的函数:启动函数I2CStart、停止函数I2CStop,如下代码:

/**
  * @brief I2C起始信号
  * @param None
  * @retval None
  */
void I2CStart(void)
{
   
    SDA_Output(1);
    delay1(DELAY_TIME);
    SCL_Output(1);
    delay1(DELAY_TIME);
    SDA_Output(0);
    delay1(DELAY_TIME);
    SCL_Output(0);
    delay1(DELAY_TIME);
}

/**
  * @brief I2C结束信号
  * @param None
  * @retval None
  */
void I2CStop(void)
{
   
    SCL_Output(0);
    delay1(DELAY_TIME);
    SDA_Output(0);
    delay1(DELAY_TIME);
    SCL_Output(1);
    delay1(DELAY_TIME);
    SDA_Output(1);
    delay1(DELAY_TIME);
}

  各类通讯规则函数,可查询i2c.c文件(ST为避免专利权,根据I2C通讯协议,以软件模拟形式实现I2C通讯,编写了各个HAL库函数),由官方例程提供,可自行查阅。
  由于篇幅有限,I2C通讯原理详情,请自行查询资料。

2. I2C读写EEPROM

  本实验板中的 EEPROM 芯片(型号: AT24C02)的 SCL 及 SDA 引脚连接到了 STM32 对应的 I2C 引脚中,结合上拉电阻,构成了 I2C 通讯总线,它们通过 I2C 总线交互。
  EEPROM 芯片的设备地址一共有 7 位,其中高 4 位固定为: 1010 b,低 3 位则由 E1/E2/E3信号线的电平决定,见下图,图中的 R/W 是读写方向位。
在这里插入图片描述
  按照前述的硬件连接图,图中 E1/E2/E3均为 0,所以 EEPROM 的 7 位设备地址是: 1010000b ,即 0x50。由于 I2C 通讯时常常是地址跟读写方向连在一起构成一个 8位数,如上图。当R/W 位为 0 时,表示写方向,所以加上 7 位地址,其值为“0xA0”,常称该值为 I2C 设备的“写地址”;当 R/W 位为 1 时,表示读方向,加上 7 位地址,其值为“0xA1”,常称该值为“读地址”。
  即,EEPROM的写地址:0xA0。读地址:0xA1。

3. I2C读写可编程电阻MCP4017

  如前硬件连接所示,MCP4017与EEPROM外设一样,挂载到I2C总线上,引脚为PB6、PB7,同时跳线帽连接J15.1与J15.2,MCP4017电阻连接至PB14。可以通过万用表测量PB14的电压判断可编程电阻的阻值。
在这里插入图片描述
  MCP4017可编程电阻内部由128个电阻串联而成,如下图所示。MCP4017的默认总阻值为100kΩ。对应0-127个档位,当寄存器为0时,阻值为0;当寄存器为0x7F(十进制数:127)时阻值为100k。通过I2C通讯写入数据(0~127),即可改变MCP4017电阻值,步长787.4Ω。
在这里插入图片描述
如下图所示,MCP4017进行I2C的通讯地址也是8位数。当R/W 位为 0 时,表示写入寄存器值,则写

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是春老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值