
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{ I2C_GenerateSTART(I2C1,ENABLE);5 t& s1 j) E2 V' a# ` I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位 , g, y4 I2 x* w( y% Y) ^: J4 s; C I2C_Send7bitAddress(I2C1,0xa0,I2C_Direction_Transmitter); }while(!(I2C_ReadRegister(I2C1,I2C_Register_SR1)&0x0002));* f# Z5 A/ ]! j I2C_ClearFlag(I2C1,I2C_FLAG_AF); }* }% G) ^" D: t, k2 ]+ { void I2C_SequentialRead_AT24C01_02(u8 sla,u8 suba,u8 *pHead,u8 len){ u8 i; I2C_AcknowledgePolling(); 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)); I2C_SendData(I2C1,sla); 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); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)); I2C_GenerateSTART(I2C1,ENABLE);, Y" |8 Z+ m, ?6 X9 ~ while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); $ I5 m* d% E) `- n5 D G' n I2C_SendData(I2C1,sla+1); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); 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));2 ?/ s8 h, h* f4 d1 ]
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!