|
ST网站上的例程是读写24c08的,他的读函数有问题,原来我在51下一直模拟I2C操作的,用起来心里很有数,按照模拟I2C的步骤重写了读写函数,连续读写,自动处理跨页问题,很容易修改成24C08/32/128/512的读写函数,把我的代码公布如下:7 \' l4 a ^5 P$ [( t/ I void I2C_AcknowledgePolling(void){ do{' X2 h$ Y# K4 a& a" V I2C_GenerateSTART(I2C1,ENABLE);* `0 f) b5 y) {; Z0 m I2C_ReadRegister(I2C1,I2C_Register_SR1);//清除ADDR位8 _8 R4 e; A) V+ f ) O( y/ M# f; l! D I2C_Send7bitAddress(I2C1,0xa0,I2C_Direction_Transmitter);% b, @/ _+ y6 ]& Z+ s! C }while(!(I2C_ReadRegister(I2C1,I2C_Register_SR1)&0x0002)); I2C_ClearFlag(I2C1,I2C_FLAG_AF); }/ @0 C) V" N8 P% } void I2C_SequentialRead_AT24C01_02(u8 sla,u8 suba,u8 *pHead,u8 len){ u8 i; ! G" y6 p# P. d' x6 v4 l+ }6 X" C I2C_AcknowledgePolling();+ l. }& P1 P0 V: C6 |7 I( ^$ _ I2C_GenerateSTART(I2C1,ENABLE); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); + e' y& W3 y8 S# c) | I2C_SendData(I2C1,sla);& P/ q9 a* @: V2 z. S$ Z while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));% Q0 H: g7 g8 n2 y3 ^6 v I2C_SendData(I2C1,suba);$ P5 k# w$ k) S0 j while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));: D) N- D8 B/ W& w5 M I2C_GenerateSTART(I2C1,ENABLE); while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); ( s% T& M3 f4 g J, g4 u9 J 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));& O- L/ f. T# A
怎么也是过不去,但是有时候能写一次读一次,第二次就不行了!打过技术支持的电话说,最好不要用硬件了,建议用软件模拟!哎,无语!