OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9534|回复: 14

分享一个STM32F1 硬件I2C读写EEPROM的例程

[复制链接]

0

主题

2

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2018-12-22
在线时间
11 小时
发表于 2020-3-19 21:22:15 | 显示全部楼层 |阅读模式
本帖最后由 duyg 于 2020-3-20 08:40 编辑

传说STM32的硬件I2C有BUG,从而大家都使用软件模拟I2C。参考了网上一篇博客(racede.me)的文章,最后我写了一份硬件I2C读写24C512的例程,没有使用中断,可以稳定地工作在400kHz,并且支持多片EEPROM。我自己仅测试了2片24C512,首片地址是A0,第二片地址是A2。经过17个小时的压力测试后,自感代码比较稳定,现分享给有需要的朋友。
说明:
1、使用了I2C2,PB10和PB11
2、I2C工作频率为400kHz
3、支持多片EEPROM,型号不限;支持自动探测EEPROM的片数,但不支持识别EEPROM类型,需要手工代码指定。本人只测试了2片24C512的场景
4、本例程没有使用中断,也没有使用DMA,并且不受其它中断影响
5、该代码在STM32F103上测试通过

最后,十分感谢这个博主(racede.me)以及回贴的高手们,尤其是那位分享源码的那位朋友github.com/meng4036

i2c_ee.zip

4.45 KB, 下载次数: 528

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2018-12-22
在线时间
11 小时
 楼主| 发表于 2020-3-27 19:58:59 | 显示全部楼层
希望我的代码能帮到各位
回复 支持 1 反对 0

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2020-3-19 23:06:45 | 显示全部楼层
牛皮了
回复 支持 反对

使用道具 举报

10

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2019-9-5
在线时间
134 小时
发表于 2020-3-20 08:32:37 | 显示全部楼层
帮顶~帮顶
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2018-12-22
在线时间
11 小时
 楼主| 发表于 2020-3-20 13:53:05 | 显示全部楼层
已经通过连续压力测试快25个小时了,零错误。

测试过程中通过WiFi向STM32每1秒发一条消息(230个字节),STM32使用USART3的串口进行逐字节中断接收。整个过程持续不断地向2片EEPROM写数据然后再读出来校验。
在这段时间(24小时54分钟38秒)里,一共写了16,980,100次,读了116,730,484次。平均每秒钟写189次EEPROM,读了1300次。

WeChat Image_20200320134113.jpg
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2019-5-24
在线时间
23 小时
发表于 2020-3-24 16:18:59 | 显示全部楼层
谢谢分享,赞一个!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2018-11-5
在线时间
27 小时
发表于 2020-4-16 15:52:10 | 显示全部楼层
感谢感谢,有劳了
回复 支持 反对

使用道具 举报

1

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1380
金钱
1380
注册时间
2020-3-21
在线时间
158 小时
发表于 2020-4-17 09:07:34 | 显示全部楼层
谢谢楼主的无私奉献
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-4-27
在线时间
9 小时
发表于 2020-4-27 23:23:29 | 显示全部楼层
谢谢分享……
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-5-10
在线时间
1 小时
发表于 2020-4-29 13:42:10 | 显示全部楼层
谢谢楼主的无私奉献
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-5-10
在线时间
7 小时
发表于 2021-7-6 08:45:30 | 显示全部楼层
谢谢博主
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-10-5
在线时间
8 小时
发表于 2021-8-11 08:36:30 | 显示全部楼层
谢谢分享,赞一个!
回复 支持 反对

使用道具 举报

12

主题

72

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2015-9-9
在线时间
59 小时
发表于 2022-5-10 20:56:45 | 显示全部楼层
I2C_EVENT_MASTER_RxNE 和 I2C_EVENT_MASTER_BYTE_BTF 未定义,你这个用的是什么标准库,还是HAL库啊。。。兄弟
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2021-12-14
在线时间
4 小时
发表于 2022-8-15 18:39:40 | 显示全部楼层
请问一下,我是通过iic接了4个eeprom,在使用中通过不同频率值数据存储在不同eeprom中,怎么设置读写地址,函数都是复制原子哥的
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2021-12-14
在线时间
4 小时
发表于 2022-8-15 18:40:40 | 显示全部楼层
上善若水321 发表于 2022-8-15 18:39
请问一下,我是通过iic接了4个eeprom,在使用中通过不同频率值数据存储在不同eeprom中,怎么设置读写地址, ...

在同一个eeprom中,也是根据频率不同存储地址也不同,不会写代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 07:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表