基于STM32F103的模拟I2C时序读写EEPROM(AT24C02)

本文介绍了如何使用STM32F103模拟I2C协议与AT24C02 EEPROM进行通信。内容包括硬件接线、I2C协议的物理层和协议层解析,以及相应的代码实现。在实践中,作者提醒读者注意SCL信号控制和延迟问题,以避免程序错误。
摘要由CSDN通过智能技术生成

1.硬件准备

STM32F103核心板 AT24C02
SCL线连PB6,SDA线连PB7

2.理论部分

2.1 I2C简介

I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实
现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地
使用在系统内多个集成电路(IC)间的通讯。以下分为物理层与协议层两部分讲解

2.2 I2C物理层

I2C物理层一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

2.3 I2C协议层

在这里插入图片描述以上的格子都表示SDA线发送的数据包,S表示start信号,P表示stop信号,A表示ack信号,SLAVE ADDRESS表示从机地址。其他的都能看懂
STM32自带了I2C的外设,可以通过自带的库函数与其他外设进行I2C通信,也可以模拟I2C时序实现软件I2C。模拟I2C首先要用SDA与SCL表示出上面的各种信号

在这里插入图片描述在这里插入图片描述I2C 使用 SDA 信号线来传输数据,使用 SCL信号线进行数据同步。 SDA 数据线在 SCL的每个时钟周期传输一位数据。传输时, SCL为高电平的时候 SDA表示的数据有效,即此时的 SDA为高电平时表示数据“1”,为低电平时表示数据“0”。当 SCL为低电平时,SDA的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备。
也就是说,SCL低电平时SDA进行电平的转换,在SCL为高电平时将SDA发送出去。
在这里插入图片描述

3.代码部分

soft_I2C.h

#define EEPROM_GPIO_PORT	GPIOB
#define PIN_SCL			GPIO_Pin_6
#define PIN_SDA		  GPIO_Pin_7

#define WRITE_ADDR	0XA0
#define READ_ADDR		0XA1
#define READ_SDA		GPIO_ReadInputDataBit(EEPROM_GPIO_PORT,PIN_SDA)
#define SCL_H			    GPIO_SetBits(EEPROM_GPIO_PORT,PIN_SCL)
#define SDA_H				GPIO_SetBits(EEPROM_GPIO_PORT,PIN_SDA)
#define SCL_L				GPIO_ResetBits(EEPROM_GPIO_PORT,PIN_SCL)
#define SDA_L				GPIO_ResetBits(EEPROM_GPIO_PORT,PIN_SDA)

void I2C_GPIO_Init(void);
void I2C_Start(void);
void I2C_Stop(void);
void I2C_Ack(void);
void I2C_NAck(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值