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

终于搞定了STM32读写EEPROM

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:21
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下:
" z. b9 q, N/ Q; e5 m8 L- w$ L9 \% b$ o- ]' ^+ o8 V5 g( Q. [
void I2C_AcknowledgePolling(void){
1 O. Z6 L: _' n3 m  x! {    do{# p, W1 G- H0 J, A6 r
        I2C_GenerateSTART(I2C1,ENABLE);
3 R: Y0 }  T; v6 f; v5 e        I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位
3 t* k! Q3 E. k0 p) |& |1 ?- B: c7 a9 m: R$ U- l* t! r! N5 j
        I2C_Send7bitAddress(I2C1,0xa0,I2C_Direction_Transmitter);/ O. k) E2 W! Q# k" Z) F, D. Y+ @
    }while(!(I2C_ReadRegister(I2C1,I2C_Register_SR1)&0x0002));9 B9 O* \9 X% M1 t4 l7 a
  ' C1 d5 ~4 _8 i2 W2 j8 z
    I2C_ClearFlag(I2C1,I2C_FLAG_AF);1 i9 p2 j4 f0 d( Q
}- ^" z/ \' ~6 \* B  S* j' d
void I2C_SequentialRead_AT24C01_02(u8 sla,u8 suba,u8 *pHead,u8 len){! T  l0 [: W# {- k3 Y6 F+ A
    u8 i;% A' U2 z: d4 Q) Q0 e2 `
& R0 {# H0 |8 n! u6 O6 d" ?8 h
    I2C_AcknowledgePolling();" z) x: U) R. N$ ?
    4 R& |# d& H- T: W, R. ]
    I2C_GenerateSTART(I2C1,ENABLE);( ]3 c& y1 L3 M% Y0 N
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  ) z* h  y9 u( w+ p
               
' Q" `" e$ @7 m& |    I2C_SendData(I2C1,sla);
: i2 ~2 d2 g8 ^: D# R* s    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
+ w/ F- ^) _: X$ q9 B6 h; [& w1 v$ i$ k4 ?
    I2C_SendData(I2C1,suba);( j; P$ y; |/ F. [8 `9 h* Q
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
) {0 G' U* ^9 y$ |               
2 G9 ^2 z4 ^( n: q    I2C_GenerateSTART(I2C1,ENABLE);
8 C# ?' L% f2 j1 y    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
7 p1 V2 H* ^! M
9 U( A, F5 M' L4 {# q    I2C_SendData(I2C1,sla+1);
) ^. E- l0 R0 @8 ]( H  {    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));   
, b* x* ?9 X# q0 C; K  D* Y3 ~# D2 a6 ~8 F* U2 q
    if(len>1){
$ v& ]/ L  V. k4 N, S+ `        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,我的怎么不行啊,经常死在到主控模式响应那# W  Q6 E. J3 K3 h
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));/ a5 M$ k. E% U. V, W
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版