EEPROM_IIC

1、IIC初始化

1.使能时钟
GPIOB:RCC_APB2PeriphClockCmd();
I2C1:RCC_APB1PeriphClockCmd();
2.初始化gpio
SCL:GB6,复用开漏
SDA:GB7,复用开漏
GPIO_Init();
3.初始化I2C外设
时钟频率:400KHz(400000)
模式:I2C模式
占空比:I2C_DutyCycle_2
自身地址:0x5f(7位地址)
应答:使能
应答位数:7位
I2C_Init();
4.使能I2C外设
I2C1:I2C_Cmd();
在这里插入图片描述

在这里插入图片描述

2、收发数据函数

2.1发一个字节

1.发送一个起始信号,并检测EV5事件
在这里插入图片描述
2.发送8位写地址,并检测EV6事件(EV8可检测可不检测)
在这里插入图片描述
3.发送存储单元地址,并检测EV8事件
在这里插入图片描述
4.发送数据,并检测EV8_2事件
在这里插入图片描述
5.发送停止信号
在这里插入图片描述

2.2发多个字节(最大一次发8个)

void EEPROM_page_write(uint8_t addr,uint8_t *data,uint8_t num)
1.前3步一样
发起始信号,发地址,发存储地址
2.发送多个数据
发送数据后,检测EV8事件,然后个数减数据地址加
个数减到0跳出循环
3.发停止信号
在这里插入图片描述

2.3读多个字节

void EEPROM_read(uint8_t addr,uint8_t *data,uint8_t num)
1.前3步一样
发起始信号,发写地址,发存储地址
2.在次发送起始信号,检测EV5事件
3.发送8位读地址,并检测EV6事件
参数2选择接收方向,检测读的
在这里插入图片描述
4.读取多个数据
判断是否读最后一个数据:是关闭应答,否往下执行
接收数据后,先检测EV7事件,然后读取数据到数组地址
个数减,地址加
个数减到0跳出循环
5.发停止信号并且开应答
在这里插入图片描述

3、等待EEPROM存储数据结束

1.发起始信号
2.检测起始位标志位SB,也就是EV5事件
3.发地址
4.检测地址发送标志位(主模式)“ADSL”,ADDR,也就是EV6事件
5.未检测到ADDR继续发送起始信号
6.检测到ADDR发送停止信号
在这里插入图片描述

4、发送数据到EEPROM,然后读出数据利用串口1发送到电脑

1.定义2个数组
1个输入8个数据(因为EEPROM一次性只能接收8个数据)
1个数据初始化为0
2.初始化外设
初始化串口和IIC
3.发数组到EEPROM
4.等待EEPROM接收完成
5.读EEPROM

只能8位的读(地址是8的倍数),不然会出错(EEPROM)
比如地址是8,16,24,32
6.利用串口发送到电脑
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dz小伟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值