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

终于搞定了STM32读写EEPROM

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:21
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下:
9 Z. m2 F4 T/ R( m+ P" g- H% S( ^5 n7 c4 S7 u; v
void I2C_AcknowledgePolling(void){0 h3 {/ \: a2 ~. p
    do{8 k3 }! d. R, n) t0 H
        I2C_GenerateSTART(I2C1,ENABLE);5 S* _6 S2 h/ {6 a$ {
        I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位
, f- W  z0 T6 y1 _5 t8 w" f8 n+ e5 i" P+ u$ k9 F4 w5 t2 R
        I2C_Send7bitAddress(I2C1,0xa0,I2C_Direction_Transmitter);' T$ h0 F& w6 }
    }while(!(I2C_ReadRegister(I2C1,I2C_Register_SR1)&0x0002));
) u, j7 U- [7 ^  1 g  l1 Z, k' j( }
    I2C_ClearFlag(I2C1,I2C_FLAG_AF);9 x% x' ]% e' r6 L6 C( v
}5 \" u7 s1 y: N/ p$ c1 [* w+ }7 z
void I2C_SequentialRead_AT24C01_02(u8 sla,u8 suba,u8 *pHead,u8 len){
! u, R8 L! A# [    u8 i;
8 X+ Z  K# P& r4 ]4 O" [8 e% A1 g: {0 [5 p+ Q: x  j
    I2C_AcknowledgePolling();! H& @3 u6 F* S8 Q
    ( J! Q, \0 F& }" v2 E  X
    I2C_GenerateSTART(I2C1,ENABLE);+ p; v( z6 ?1 r0 Q+ A& g3 W
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
& p8 B7 c% e( p8 }, K               
& I) C- x1 n: M9 v6 u! M& z    I2C_SendData(I2C1,sla);
* L$ E6 U+ K/ }0 z    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));' h3 T( J0 |% B- J: w
3 A+ z* \% s" O( u! c  J5 k
    I2C_SendData(I2C1,suba);' m+ k! J" c0 t, B6 r5 m
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
1 r" r1 g& x9 k: j               & s+ M, d; G1 ~# m9 Q6 c/ c+ i
    I2C_GenerateSTART(I2C1,ENABLE);) u. `8 t. t0 S
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
5 u" c5 @& p/ Y7 L- j8 U' P; U4 F
+ m; ^8 g; L3 L1 N; q3 T% k5 d* R    I2C_SendData(I2C1,sla+1);
% ~8 p. J) p% _0 P) Z0 v# B, y    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));    - j' r$ T1 f2 ^6 [) [" L
+ m% h1 L8 ]. v4 H& w0 P6 S
    if(len>1){
" i4 t7 Z9 X+ \6 Z/ E        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,我的怎么不行啊,经常死在到主控模式响应那  q5 Z; s" @. T% t5 Q! }0 i
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));/ K; j, r/ x" A1 |5 W1 o( N& O  c
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版