你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

终于搞定了STM32读写EEPROM

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:21
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下:7 \' l4 a  ^5 P$ [( t/ I

4 s; H( H2 v' a+ q: q, q9 ^: B$ {. Lvoid I2C_AcknowledgePolling(void){
4 Y$ F4 N8 m# z5 h2 a+ F    do{' X2 h$ Y# K4 a& a" V
        I2C_GenerateSTART(I2C1,ENABLE);* `0 f) b5 y) {; Z0 m
        I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位8 _8 R4 e; A) V+ f
) O( y/ M# f; l! D
        I2C_Send7bitAddress(I2C1,0xa0,I2C_Direction_Transmitter);% b, @/ _+ y6 ]& Z+ s! C
    }while(!(I2C_ReadRegister(I2C1,I2C_Register_SR1)&0x0002));
3 s/ o9 u: p% w8 U9 K7 t6 W  
! ?! }0 C* u" {& }# m9 A4 d    I2C_ClearFlag(I2C1,I2C_FLAG_AF);
& N1 B, Q1 E8 ^) C  p; o}/ @0 C) V" N8 P% }
void I2C_SequentialRead_AT24C01_02(u8 sla,u8 suba,u8 *pHead,u8 len){
! c: `- V5 d. L! N. m8 P/ W: y" K    u8 i;
4 a1 Z! L1 A6 X! G" y6 p# P. d' x6 v4 l+ }6 X" C
    I2C_AcknowledgePolling();+ l. }& P1 P0 V: C6 |7 I( ^$ _
   
5 G+ K* v2 g- o1 [, h    I2C_GenerateSTART(I2C1,ENABLE);
5 Q$ f/ Q$ q" X# B. f    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
% Y1 Q$ h7 f4 _3 f6 r               + e' y& W3 y8 S# c) |
    I2C_SendData(I2C1,sla);& P/ q9 a* @: V2 z. S$ Z
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));% Q0 H: g7 g8 n2 y3 ^6 v

: U" ?" e  E9 w6 ~* R8 L0 H    I2C_SendData(I2C1,suba);$ P5 k# w$ k) S0 j
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));: D) N- D8 B/ W& w5 M
               
" j; D3 u3 J! y7 \2 S+ ?    I2C_GenerateSTART(I2C1,ENABLE);
# u2 U7 _; {' t$ e  z    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
4 R5 D! P/ |- ~( I& K, g  Z3 C% L( s% T& M3 f4 g  J, g4 u9 J
    I2C_SendData(I2C1,sla+1);
2 I$ @3 E) Z! f+ R6 [    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));   
  o; \; `  t+ ?6 {
( n! P* a& l9 ^+ A% F$ B6 I    if(len>1){
8 E% [: d, J6 e4 B9 S6 i8 U        for(i=0;i
赞 收藏 1 评论6 发布时间:2008-9-3 20:21

举报

6个回答
ml8866 回答时间:2011-3-8 15:00:18

RE:终于搞定了STM32读写EEPROM

谢谢
瘦猪呆兔 回答时间:2011-4-28 11:38:54

RE:终于搞定了STM32读写EEPROM

读之前还是要重新初始化一下,不然会有问题哦~
火雷达 回答时间:2011-10-26 13:49:10

RE:终于搞定了STM32读写EEPROM

STM32是要用软件模拟的,有人已经做过测试,硬件I2C好像是有点问题。
laigs218 回答时间:2011-11-8 17:00:57

RE:终于搞定了STM32读写EEPROM

学习了哈哈谢谢楼主!
kevinsyt 回答时间:2011-11-25 11:56:52

RE:终于搞定了STM32读写EEPROM

难道说这里面有硬bug
cedar-358594 回答时间:2012-7-19 17:15:13

RE:终于搞定了STM32读写EEPROM

你搞定了硬件I2C,我的怎么不行啊,经常死在到主控模式响应那8 B8 v8 O$ K4 Z
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));& O- L/ f. T# A
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版