首页 > 解决方案 > 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;
}

看情节

有任何想法吗?

标签: c++arduinotype-conversion32-bit

解决方案


打扰了!此行为的原因部分与硬件有关。降低 SPI 总线频率后,问题就消失了。uC 无法正确确定 SPI 事务的第一个(符号)位。因此,我得到的只是积极的价值观。 现在没事了


推荐阅读