
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下: % 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位 + 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)); 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){ u8 i; " [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)); I2C_SendData(I2C1,sla); 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)); & 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)); I2C_SendData(I2C1,sla+1); 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){ for(i=0;i |
RE:终于搞定了STM32读写EEPROM
RE:终于搞定了STM32读写EEPROM
RE:终于搞定了STM32读写EEPROM
RE:终于搞定了STM32读写EEPROM
RE:终于搞定了STM32读写EEPROM
RE:终于搞定了STM32读写EEPROM
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));/ K; j, r/ x" A1 |5 W1 o( N& O c
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!