I2C
I2C是二进制总线,具有所需引脚数少、主从模式、总线仲裁等特点。
1.所有设备并接在总线上
2.总线上挂载的每一个模块可作为主设备和从设备。任一时刻只能有一个主设备(半双工)。当完成一次数据传输事务后,主设备释放总线控制,恢复为从设备。主设备发送启动信号,从设备需要发送应答信号。
3.总线上每个器件都有唯一的地址。
4.当同时有多个设备申请控制总线时,由设备时钟脉冲来进行总线裁决。
I2C需要两根线,SDA、SCL。

I2C总线应用结构
I2C数据格式
数据帧:启动信号(一位)+设备地址(7位)+读/写命令(一位)+应答(一位)+数据(一字节)+应答(一位).........+数据(一字节)+应答(一位)+停止信号
我们能发现:除第一个字节之外,剩余的传输都是每发送一字节数据,传回一位应答。
stm32 I2C组成
1.数据寄存器(I2C_DR):发送时,数据经内部总线暂存于此,并通过移位寄存器进行串并转换,在SCL时钟作用下从SDA引脚逐位送出;接收时,数据从SDA引脚进入,经移位寄存器的串/并转换,形成字节数据后暂存与此,最后以中断的方式通知CPU。
2.地址寄存器(I2C_OAR):单地址模式时,设备自身地址存储于OAR1中。
3.控制寄存器(I2C_CR):
· I2C_CR1:完成START、STOP、ACT条件设置,以及其他高级工作特性,如SMBUS模式配置。
· I2C_CR2:完成模块基本工作特性,如时钟频率、中断控制、DMA请求。
4.状态寄存器(I2C_SR):
· I2C_SR1:反映起始条件SB、停止条件STOPF、地址是否匹配ADDRF等状态。
· I2C_SR2:反映I2C接口的状态(主/从)、总线忙、数据收/发等状态。
5.时钟控制寄存器(I2C_CCR):配置接口的工作模式(标准、快速),以及相应模式下时钟控制分频系数,快速模式下的占空比,这对于数据的正确收发十分重要。
EEPROM
“EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入”——百度百科
蓝桥杯CT117E开发板采用M24C02这款电可擦写只读存储器。

EEPROM外设电路

M24C02数据手册
开发板上的是256*8规格的存储器,存储页有8页,每页能存储的最大整数是255(范围0~255)
实验程序
实验现象:保存秒数,掉电后重新上电即可回复。
实验代码:
while (1)
{
val = x24c02_read(0);//读出EEPROM中的数据信息//注:括号中的是页地址,范围0~7
x24c02_write(0, ++val);//val自加一后存储进EEPROM中
HAL_Delay(1000);//延时1秒
/* USER CODE END WHILE */
LCD_SetTextColor(Red);
sprintf(buf, ' PWR CNTR:%d ', val);
LCD_DisplayStringLine(Line8, (uint8_t *)(buf));//LCD屏显示秒数
/* USER CODE BEGIN 3 */
}
其余代码与官方例程中保持相同即可。
关键字:stm32 I2C EEPROM
引用地址:
5.stm32:I2C和EEPROM
推荐阅读最新更新时间:2026-03-20 10:37
5.stm32:I2C和EEPROM
I2C I2C是二进制总线,具有所需引脚数少、主从模式、总线仲裁等特点。 1.所有设备并接在总线上 2.总线上挂载的每一个模块可作为主设备和从设备。任一时刻只能有一个主设备(半双工)。当完成一次数据传输事务后,主设备释放总线控制,恢复为从设备。主设备发送启动信号,从设备需要发送应答信号。 3.总线上每个器件都有唯一的地址。 4.当同时有多个设备申请控制总线时,由设备时钟脉冲来进行总线裁决。 I2C需要两根线,SDA、SCL。 I2C总线应用结构 I2C数据格式 数据帧:启动信号(一位)+设备地址(7位)+读/写命令(一位)+应答(一位)+数据(一字节)+应答(一位).........+数据(一字节)+应答(一位)+停止信号
[单片机]
u-boot-2009.08在mini2440上的移植 增加I2C EEPROM功能
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,参考文章: 10.1,实现u-boot的I2C EEPROM功能 mini2440开发板上的AT24C08A芯片提供了8kbyte的非易失的EEPROM存储空间,而且是通过I2C协议进行读写的,U-boot提供了对I2C和EEPROM的操作支持。 打开/include
[单片机]
51单片机——I2C总线EEPROM
我们可以把数据保存在EEPROM中,这样断电数据也不会丢失。 常用的串行总线协议: 目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线、SPI总线和SCI总线。 I2C总线:以同步串行2线方式进行通信(一条时钟线,一条数据线)。 SPI总线:则以同步串行3线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。 SCI总线:是以异步方式进行通信(一条数据输入线,一条数据输出线)。 1-wire :即单线总线,又叫单总线。 例子: 1-wire ——数字温度传感器DS18B20 IIC——oled屏幕 I2C串行总线的组成及工作原理 I2C总线是PHLIPS公司推出的一种串行总线
[单片机]
STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
AT24C系列 AT24C系列是常见的EEPROM存储芯片, 常用于保存参数及掉电记忆的数据 容量: 型号代表了其容量, 从AT24C01到AT24C1024, 存储容量为1K BIT ~ 1024K BIT, 注意单位是Bit, 如果转换为字节就是128字节 ~ 128K字节 电压: 整个系列有2.7V (2.7V至5.5V)和1.8V (1.8V至5.5V)两个版本, 都兼容3.3V和5V 封装: 8-lead PDIP, 8-lead JEDEC SOIC, 8-lead MAP, 5-lead SOT23, 8-lead TSSOP 和 8-ball dBGA2 与其他存储器件相比 容量小 皮实, 几近无限的擦
[单片机]
STM32-(20):I2C通信(实验:读写EEPROM)
硬件电路连接 底板上的 I2C 接口 A0、A1是用来确定器件的地址的。 排针上的引脚图: 核心板上的引脚图: 通过I2C总线实现对EEPROM的读写操作的准备工作: 1、掌握芯片(目标对象)特性,才能对其正确的读和写。 2、掌握 I2C 通信,读写过程需要用到。 3、Cortex的一些操作,编程方法。 实验内容:通过I2C总线实现对EEPROM的读写操作 main.c #include stm32f10x_lib.h #include IIC.h /*------------函数的声明---------------*/ void Delay_MS(u16 dly); void RCC_Configurati
[单片机]
C51IO口模拟I2C总线驱动AT24C16 (EEPROM部分)
/* 名称:C51IO口模拟I2C总线驱动AT24C16 说明:关于EEPROM,即这里的AT24C16是一个特殊形式的FLASH存储器,不过其容量一般较少。比较适合于存储少量的数据。 AT24C16的通信接口是标准的I2C通信,即我们需要根据I2C通信协议来操纵EEPROM设备。 关于AT24C16的的各种操作,这里就不细讲了,简单介绍一下。 (1)、主机向AT24C16写一个字节:首先需要发送设备地址,然后发送需要访问的存储器地址。然后在发送要写入的数据。这里省略了开始、结束和确认等信号的产生。 (2)、指定页写入n个字节:和(1)的基本操作很类似。不同的是可以连续写入n个数据。这里要小注意一点的就是,写入的数
[单片机]
linux I2C读写EEPROM
/************************************************************/ //文件名:app_at24c02.c //功能:测试linux下iic读写at24c02程序 /************************************************************/ //包含头文件 #include stdio.h #include stdlib.h #include unistd.h #include sys/ioctl.h #include sys/types.h #include sys/stat.h #include fcntl.
[单片机]
EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC _ :i2c.c 1 /*----------------------------------------------- 2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器 4 周期,即晶振频率要小于12MHZ) 5 ------------------------------------------------*/ 6 #include i2c.h 7 #define _Nop() _nop_() //定义空指
[单片机]