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

终于搞定了STM32读写EEPROM

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:21
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下:; n6 m) T5 d! a, w. c( ^9 [
) d: I6 s, O1 s9 a9 \
void I2C_AcknowledgePolling(void){4 z' l, H1 `' B: v
    do{
/ ^5 q5 t/ p% o        I2C_GenerateSTART(I2C1,ENABLE);5 t& s1 j) E2 V' a# `
        I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位
, p2 n0 h. S2 f* M: Z% q& ?, g, y4 I2 x* w( y% Y) ^: J4 s; C
        I2C_Send7bitAddress(I2C1,0xa0,I2C_Direction_Transmitter);
3 i* J( j6 x. J* g* m+ H' g3 n    }while(!(I2C_ReadRegister(I2C1,I2C_Register_SR1)&0x0002));* f# Z5 A/ ]! j
  
  u: }& E% g5 V0 k+ q6 @. }$ Y    I2C_ClearFlag(I2C1,I2C_FLAG_AF);
' B  a/ U7 ?9 J) Z# s}* }% G) ^" D: t, k2 ]+ {
void I2C_SequentialRead_AT24C01_02(u8 sla,u8 suba,u8 *pHead,u8 len){
1 M& M: n; F+ K0 S    u8 i;
# M' l. k8 B8 o. U1 B
* Y* A$ x& K) n( _  G    I2C_AcknowledgePolling();
1 ^3 v0 E0 X5 N- E5 @    1 b% V6 ^$ o6 f" s6 Z1 `4 R
    I2C_GenerateSTART(I2C1,ENABLE);! {  d3 f- k! H" h" y" O; m8 m0 P
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
. }' g0 c2 r9 i& @3 A, O' ^               
; s- `) y: b* M0 [# _3 ?6 I$ B    I2C_SendData(I2C1,sla);
# U- }5 S, [' j    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));) u0 z; [1 ~$ H, i1 i+ Z
) Q- m+ s( }5 e" k5 h
    I2C_SendData(I2C1,suba);
% M4 w! n4 l/ `0 |5 h9 l    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
) x1 r; ~! w- ]) C8 b7 d               
5 P3 y. e) Z0 [* e/ K/ b    I2C_GenerateSTART(I2C1,ENABLE);, Y" |8 Z+ m, ?6 X9 ~
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));  
! I: `+ O' ~# ^$ v0 ~/ R6 K7 s$ I5 m* d% E) `- n5 D  G' n
    I2C_SendData(I2C1,sla+1);
% C6 }! s6 V* Y) L    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));   
$ t3 S4 G3 c2 r
- x: s/ d% t% [) ?- \5 u    if(len>1){
7 d7 w8 Q. T# \        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,我的怎么不行啊,经常死在到主控模式响应那' f1 g: @9 P0 }7 L$ f
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));2 ?/ s8 h, h* f4 d1 ]
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!

所属标签

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