完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
看数据手册
|
|
|
|
手册,,记得oxa0 a1
|
|
|
|
写地址是 0XA0 读地址是0XA1 你可以看看他的数据手册呀
|
|
|
|
u8 I2C1_ReadByte(u16 DriverAddr,u16 ReadAddr)
{ u8 temp=0; IIC_Start(); if(EE_TYPE>AT24C16) { IIC_Send_Byte(DriverAddr); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr>>8);//发送高地址 IIC_Wait_Ack(); }else IIC_Send_Byte(DriverAddr+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据 IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr%256); //发送低地址 IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(0XA1); //进入接收模式 IIC_Wait_Ack(); temp=IIC_Read_Byte(0); IIC_Stop();//产生一个停止条件 return temp; } void I2C1_WriteByte(u16 DriverAddr,u16 WriteAddr,u8 DataToWrite) { IIC_Start(); if(EE_TYPE>AT24C16) { IIC_Send_Byte(DriverAddr); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte(WriteAddr>>8);//发送高地址 }else { IIC_Send_Byte(DriverAddr+((WriteAddr/256)<<1)); //发送器件地址0XA0,写数据 } IIC_Wait_Ack(); IIC_Send_Byte(WriteAddr%256); //发送低地址 IIC_Wait_Ack(); IIC_Send_Byte(DataToWrite); //发送字节 IIC_Wait_Ack(); IIC_Stop();//产生一个停止条件 Delay_Ms(2); } 上面是读写EEPROM的函数,其中EE_TYPE定义为AT24C16(2K字节EEPROM),即EEPROM大小大于2K字节(如:AT24C3264128......)按照if里面的发送期间地址和数据地址;如果EEPROM大小小于2K字节(如:AT24C02/04/08/16)则按照else发送地址。其中DriverAddr = 0xA0,即A2A1A0均接地 |
|
|
|
手册上说的很明白,1K/2K的EEPROM发送地址为0xA0|(ReadAddr/256)<<1),就是上面写的那样else后面,具体还不懂可以随时来消息
|
|
|
|
写地址是 0XA0 读地址是0XA1
|
|
|
|
数据手册或者直接i2c scan 下地址。。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:27 , Processed in 0.735106 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号