首页 > 解决方案 > 使用 SPI 将 288 个 Uint16 值的缓冲区从一个 arduino 发送到另一个

问题描述

我正在尝试使用两者之间的 SPI 将 288 个 Uint16 值的缓冲区从一个 Arduino(主)发送到辅助 Arduino。我正在尝试发送数据缓冲区,然后在辅助 Arduino 上读取它并串行打印我收到的缓冲区,但我似乎得到随机值(每次串行打印它们都是来自缓冲区的不同值)。不确定它是否在发送时将 uint16 拆分为单独的字节,或者我是否没有正确读取或写入 SPI 值。有没有办法用 SPI 一次性发送一个 16 位值的数组,然后读入第二个 Arduino 上的缓冲区?我是 Arduino 上的 SPI 新手,所以任何建议都会有所帮助。

主要的 Arduino 代码:

#include<SPI.h>

uint16_t buffer_data[288];


void setup()
{
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV32);  //2^n = 2, 4, 8, 16, 32

}


void loop()
{
digitalWrite(SS, LOW);
  for (uint16_t x = 0; x <sizeof(buffer_data); x++) {
    buffer_data[x] = x;
  }
  SPI.transfer(buffer_data, 288);
  digitalWrite(SS, HIGH);
  delay(10000);
}

二次阿杜诺:

#include<SPI.h>

uint16_t buffer_new[288];
int pos = 0;
bool flag = false;

void setup()

{
  Serial.begin(115200);              

  SPCR |= _BV(SPE);                 

  SPI.attachInterrupt();                  
  
}

ISR (SPI_STC_vect)                        
{
  volatile byte data_new = SPDR;           
  
  if (pos < sizeof(buffer_new)) {   
    buffer_new[pos++]  = uint16_t(data_new);
    
  }
  else {
    flag = true;
  }
}

void loop()
{  
  if (flag) {
    for (int x = 0; x <288; x++) {
      Serial.println(buffer_new[x]);
    }
    pos = 0;
    flag = false;
  }
}

输出:

0
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0
10
0
11
0
12
0
13
0
14
0
15
0
16
0
16
1
32
1
48
1
64
1
80
1
96
1
112
1
128
1
144
1
160
1
176
1
192
1
208
1
224
1
240
2
0
2
16
16
1
24
1
32
1
40
1
48
1
56
1
64
1
72
1
80
1
88
1
96
1
64
11
128
11
192
12
0
12
64
12
128
12
192
13
0
13
64
13
128
13
192
0
7
32
7
64
7
96
7
128
7
160
7
192
7
224
8
0
8
32
8
64
8
96
8
128
8
160
8
192
8
224
9
0
36
1
40
1
44
1
48
1
52
1
56
1
60
1
64
1
68
1
72
1
76
1
64
5
80
5
96
5
112
5
128
5
144
5
160
5
176
5
192
5
208
5
224
5
240
6
0
6
16
6
32
6
48
6
64
6
80
6
96
6
112
6
128
6
144
6
160
6
176
6
192
6
208
6
224
6
240
7
0
7
16
7
32
7
48
7
64
7
80
7
96
7
112
7
128
7
144
7
160
7
96
15
128
15
160
15
192
15
224
16
0
16
32
16
64
16
96
16
128
16
160
16
0
67
128
68
0
68
128
69
0
69
128
70
0
70
128
71
0
71
128
72
0
72
128

标签: arduinobufferspi

解决方案


推荐阅读