c++ - Arduino:来自二进制补码的 int32_t
问题描述
我试图实现一个简单的事情:通过 SPI 从 ADC 读取 4 个字节的数据并将它们组合成有符号 (int32_t) 值,但我得到了意想不到的结果(见情节)。我读取ADC的功能如下:
int32_t readDataContinuous() {
// delayMicroseconds(100);
while (digitalRead(DRDYPin) == HIGH) {
//do nothing (waiting for the conversion to finish)
}
int32_t resp;
digitalWrite(CSPin, LOW);
SPI.beginTransaction(SPISettings(40000000, MSBFIRST, SPI_MODE1));
resp = SPI.transfer(0x00);
resp <<= 8;
resp |= SPI.transfer(0x00);
resp <<= 8;
resp |= SPI.transfer(0x00);
resp <<= 8;
resp |= SPI.transfer(0x00);
SPI.endTransaction();
digitalWrite(CSPin, HIGH);
SerialBT.println(resp);
return resp;
}
有任何想法吗?
解决方案
打扰了!此行为的原因部分与硬件有关。降低 SPI 总线频率后,问题就消失了。uC 无法正确确定 SPI 事务的第一个(符号)位。因此,我得到的只是积极的价值观。 现在没事了
推荐阅读
- javascript - 验证表单并显示警报中未填写的项目
- terminal - 仅从 grep -n 中取出前两个值
- java - Jenkinsfile:从另一个脚本传递 env
- c - 如何处理异步输入和同步输出?
- python - Kivy FileChooser 重叠
- c - 给定数组的最大大小,我应该写完所有内容并在最后缩小还是每次都扩展?
- php - 如何在 Laravel 中验证模型对象实例?
- snowflake-cloud-data-platform - Snowflake 中的暂存数据:下载了 snowsql 但仍无法使用“put”命令
- rest - 通过 IP 识别的替代方法
- python - 字典中的 KeyError 但键存在