初级会员

- 积分
- 169
- 金钱
- 169
- 注册时间
- 2020-11-24
- 在线时间
- 38 小时
|
发表于 2021-2-1 10:19:57
|
显示全部楼层
原子您好,我现在遇到的问题就是我用IIC通信,每次读取一个字节信息时,都会返回应答失败,程序如下- // 在MAG3110指定寄存器地址读出一个字节数据
- // ReadAddr:开始读数的寄存器地址 0-255
- // 返回值,读到的数据
- u8 MAG3110_ReadOneByte(u16 ReadAddr)
- {
- u8 temp = 0; // 存储读到的数据
- IIC_Start(); // 发送起始信号
- IIC_Send_Byte(MAG3110_IIC_WRITE_ADDRESS); // 写操作地址
- if(IIC_Wait_Ack())
- {
- IIC_Stop();
- printf("ACK Failed!\r\n");
- return 0;
- }
- IIC_Send_Byte(ReadAddr);
- if(IIC_Wait_Ack())
- {
- IIC_Stop();
- printf("ACK Failed!\r\n");
- return 0;
- }
- IIC_Start(); // 发送新的起始信号
- IIC_Send_Byte(MAG3110_IIC_READ_ADDRESS); // 发送从机地址+1(读操作地址)
- if(IIC_Wait_Ack())
- {
- IIC_Stop();
- printf("ACK Failed!\r\n");
- return 0;
- }
- temp = IIC_Read_Byte(0); // 读取从机数据,读完之后从机不产生应答
- IIC_Stop(); // 停止信号
- return temp;
-
- }
复制代码 每次写入单个字节如果不判断从设备是否应答成功,那读出来的数据如何保证正确性?我看了您上面的回复,说写入单个字节无需判断是否应答成功?这是什么原因呢???谢谢。 |
|