Arduino Wire.requestFrom 函数读取没有反应

前言

在读取DA217 传感器 ID 的时候,发现把需要读取的寄存器地址写过去之后,再用 Wire.requestFrom 去读取就没有反应了(程序不会继续运行,会卡死到此处)。

过程

  1. 参看 DA217 手册,看 I2C 通讯部分里面有一张通讯示例图。
  2. 其中 Table 13 是读取示意图,在里面可以看到把寄存器地址写过去之后,直接就发送下一个开始位,而不是发送 P(停止位)。所以写代码的时候需要注意这一点,在把寄存器地址写完之后,不能发送停止位。对应到代码里面就是 Wire.endTransmission(0); //这里的参数0,表示不发送停止位。
  3. 所以最终的读取代码是
uint8_t DA217::da217_read_reg(uint8_t reg)
{
		uint8_t data = 0;
		Wire.beginTransmission(_address); // start transmission to device 
		Wire.write(reg); // sends register address to read from
		Wire.endTransmission(0); // end transmission

		Wire.requestFrom((uint8_t)_address, (size_t)1,true);// send data n-bytes read
		Wire.available();
		data = Wire.read(); // receive DATA
		return 	data;
}

参考文章

1.【arduino库文件】-wire.h

这篇文章对 Arduino 的I2C函数有很详细的介绍。

posted @ 2022-11-24 21:02  SpinJump  阅读(640)  评论(1编辑  收藏  举报