为什么 spi.recieve() 函数在 mbed 的 SPI 中总是返回零?

szl0834

我想在两个mbed板之间建立一个SPI连接,我发现用于检测来自master的数据传输的spi.recieve()函数总是返回零并且无法建立连接。

我尝试在我的代码中删除 'if',它可以工作,但我仍然不明白为什么该函数返回零。

这是一些代码:

while (1)
  {
    transmit_value = 100 * voltage;
    spislave.reply(transmit_value);
    if (spislave.receive())
    {
      receive_value = spislave.read();
    }

这是我完成的代码:

#include <mbed.h>
Serial pc(USBTX, USBRX);
SPISlave spislave(p5, p6, p7, p8);
AnalogIn voltage(p20);
PwmOut led(p21);
BusOut display(p9, p10, p11, p12, p13, p14, p15, p16);
DigitalOut GroundLeft(p27);
DigitalOut GroundRight(p28);
int main()
{
  char transmit_value = 50;
  char receive_value = 60;
  spislave.format(8,0);
  spislave.frequency(1000000);
  while (1)
  {
    transmit_value = 100 * voltage;
    spislave.reply(transmit_value);
    if (!spislave.receive())
    {
      receive_value = spislave.read();
    }
    led.write(receive_value / 100.0);
    int leftnum = receive_value / 10;
    int rightnum = receive_value % 10;
    pc.printf("%d\n", receive_value);
    GroundLeft = 0;
    GroundRight = 1;
    switch (leftnum)
    {
    case 0:
      display = 0x3F;
      break;
    case 1:
      display = 0x06;
      break;
    case 2:
      display = 0x5B;
      break;
    case 3:
      display = 0x4F;
      break;
    case 4:
      display = 0x66;
      break;
    case 5:
      display = 0x6D;
      break;
    case 6:
      display = 0x7D;
      break;
    case 7:
      display = 0x07;
      break;
    case 8:
      display = 0x7F;
      break;
    case 9:
      display = 0x6F;
      break;
    }
    wait(0.01);
    GroundLeft = 1;
    GroundRight = 0;
    switch (rightnum)
    {
    case 0:
      display = 0x3F;
      break;
    case 1:
      display = 0x06;
      break;
    case 2:
      display = 0x5B;
      break;
    case 3:
      display = 0x4F;
      break;
    case 4:
      display = 0x66;
      break;
    case 5:
      display = 0x6D;
      break;
    case 6:
      display = 0x7D;
      break;
    case 7:
      display = 0x07;
      break;
    case 8:
      display = 0x7F;
      break;
    case 9:
      display = 0x6F;
      break;
    }
    wait(0.01);
  }
}
领域

你为什么不遵循参考代码?https://os.mbed.com/docs/mbed-os/v5.9/reference/spislave.html

使用 SPI,您必须了解 RX 和 TX 同时发生,并且操作需要一些时间。

.reply()设置要发送的内容,.receive()检查是否已收到某些内容(可能不会立即收到),并.read()从 SPI 控制器获取数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章