|
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下: 9 \% b$ o- ]' ^+ o8 V5 g( Q. [ void I2C_AcknowledgePolling(void){ do{# p, W1 G- H0 J, A6 r I2C_GenerateSTART(I2C1,ENABLE); I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位 - 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 I2C_SendData(I2C1,sla); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); & 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)); I2C_GenerateSTART(I2C1,ENABLE); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); I2C_SendData(I2C1,sla+1); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); 3 ~# D2 a6 ~8 F* U2 q 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));/ a5 M$ k. E% U. V, W
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!