完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//I2C读取一个字节
u8 I2C_Read_Byte(u8 ack) { u8 i=0,receive=0; I2C_SDA_IN(); for(i=0;i<8;i++) { I2C_SCL_L; delay_us(2); I2C_SCL_H; receive<<=1; if(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA)) receive++; delay_us(1); } if(ack==0) I2C_NAck(); else I2C_Ack(); return receive; } |
|
相关推荐
8个回答
|
|
正好刚用过iic。
1.移位是必须的,因为数据是一位一位发的,至于左移还是右移完全取决于发送时候的字节是高位在前还是低位在前。 2.我看到的iic协议里应答也是必须的,像你这样接收数据,发数据的设备如果是采取的iic协议的话那么数据位后面一定跟着一个应答位,如果不接受应答,那么这一位可能会当成数据位接收,那么数据肯定是不对的。
最佳答案
|
|
|
|
这个要根据IIC的协议来操作
|
|
|
|
一次接受一个位,你想用一个字节的话那肯定要左移一次接受一次,+1其实就是 | 0x01.应答是IIC的通讯协议,你也可以选择不应答
|
|
|
|
先好好看看I2C协议吧,看一句对一句代码,很好理解的。
|
|
|
|
zhxing001 发表于 2016-5-31 14:58 能否给说一下,为什么要根据I2C_SDA使receive++ |
|
|
|
不是很懂你的问题? 大概是根据sda的电平去决定RECEIVE的取值? 因为SDA是数据位,所以理应如此。 |
|
|
|
谢谢。。。。。 |
|
|
|
谢谢。。。。。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1423 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1359 浏览 3 评论
2902 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1504 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1934 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 04:25 , Processed in 0.751407 second(s), Total 59, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号