完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*******************************************************************************
* Function Name : AT24CXX_Init * Description : Initializes AT24xx EEPROM. * Input : None * Return : None ********************************************************************************/ void AT24CXX_Init(void) { IIC_Init( 100000, 0xA0); } /******************************************************************************* * Function Name : AT24CXX_ReadOneByte * Description : Read one data from EEPROM. * Input : ReadAddr: Read frist address. * Return : temp: Read data. ********************************************************************************/ u8 AT24CXX_ReadOneByte(u16 ReadAddr) { u8 temp=0; while( I2C_GetFlagStatus( I2C1, I2C_FLAG_BUSY ) != RESET ); I2C_GenerateSTART( I2C1, ENABLE ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) ); I2C_Send7bitAddress( I2C1, 0XA0, I2C_Direction_Transmitter ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) ); #if (Address_Lenth == Address_8bit) I2C_SendData( I2C1, (u8)(ReadAddr&0x00FF) ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) ); #elif (Address_Lenth == Address_16bit) I2C_SendData( I2C1, (u8)(ReadAddr>>8) ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) ); I2C_SendData( I2C1, (u8)(ReadAddr&0x00FF) ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) ); #endif I2C_GenerateSTART( I2C1, ENABLE ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) ); I2C_Send7bitAddress( I2C1, 0XA0, I2C_Direction_Receiver ); while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ) ); while( I2C_GetFlagStatus( I2C1, I2C_FLAG_RXNE ) == RESET ) I2C_AcknowledgeConfig( I2C1, DISABLE );---------------改为ENABLE,不行,, temp = I2C_ReceiveData( I2C1 ); --------------视乎这里还要添加代码,但不知如何写。。。。 I2C_GenerateSTOP( I2C1, ENABLE ); return temp; } ------------------ 哪为高手做过,给个示例代码参考。。。谢谢。 |
|
相关推荐
1个回答
|
|
搞定了。。把最后while 那句改成:
I2C_AcknowledgeConfig(I2C1, ENABLE); // 接收多个字节,必须开启ACK u8 len=1; // 要接收的字节数,可以是1或多个,可自己传参数修改。 u8 rlen; for(rlen = 0; rlen < len; rlen++) { if(len == 1+rlen) { I2C_AcknowledgeConfig(I2C1, DISABLE); // 若是最后一个字节 ,必须用 NAK (void)I2C1->STAR2; I2C_GenerateSTOP(I2C1, ENABLE); } // 主机接收到数据事件EV7 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); *pBuffer = I2C_ReceiveData(I2C1); // 接收的多个字节放到数组缓存里 pBuffer++; } |
|
|
|
只有小组成员才能发言,加入小组>>
456 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2865 浏览 2 评论
2352 浏览 1 评论
804浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
629浏览 1评论
489浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
353浏览 1评论
629浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 17:37 , Processed in 0.999743 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号