完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));
IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr%256); IIC_Wait_Ack(); 这是在AT24C02指定地址读出一个数据中的一段话,在发送器件地址后IIC_Wait_Ack(); 有什么用吗? 下面是应答函数 u8 IIC_Wait_Ack(void) { u8 ucErrtime=0; SDA_IN(); IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0;//?±??????0 return 0; } |
|
相关推荐
7个回答
|
|
这个函数就是判断有没有ACK.
|
|
|
|
先大致熟悉一下IIC协议
|
|
|
|
我看过协议,协议上说传输完8bit后 ,在第九个周期会给一个应答信号,我奇怪的是这个应答信号在函数中只是return 0|1,也没有什么判断。这个信号不需要函数来处理? 直接寄存器自己操作吗?
|
|
|
|
有的地方要判断,不是处处都要判断。
|
|
|
|
原子哥,那这个判断是不是调用了函数,但判断是由寄存器自己来进行判断的
|
|
|
|
都是你自己判断的。
24CXX没有用到判断ACK 但是我们MPU6050的代码使用了的,你看代码: [C] 纯文本查看 复制代码 //IIC连续写//addr:器件地址 //reg:寄存器地址//len:写入长度//buf:数据区//返回值:0,正常// 其他,错误代码u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf){u8 i; IIC_Start(); IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令if(IIC_Wait_Ack())//等待应答{IIC_Stop(); return 1;} IIC_Send_Byte(reg);//写寄存器地址 IIC_Wait_Ack();//等待应答for(i=0;i |
|
|
|
谢谢了 明白了
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
522浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 12:26 , Processed in 0.894348 second(s), Total 60, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号