arduino - 使用 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
解决方案
推荐阅读
- linux - 如何在设备树中配置多个 I/O Expander PCF8574a?
- c++ - 使用常量产生的代码比 #define 更小的示例
- colors - Chart JS中根据背景颜色确定一个点的面积
- flutter - 未处理的异常:在 _ScreenState.initState() 完成之前调用了 inheritFromWidgetOfExactType(_LocalizationsScope) 或 inheritFromElement()
- php - Laravel 队列作业给出错误模型未找到
- sapui5 - 云连接器问题。云到本地
- firebase - 设置环境变量以 "-bash: !": event not found 结尾
- typescript - 测试 NGRX 效果的茉莉花弹珠
- java - 如何将失败的 Cucumber 步骤的屏幕截图准确地附加到 Allure 报告中,而不是在 Tear Down 部分?
- generics - 如何让 MS Fakes 为 List 等通用集合类型生成 shim
?