我正在尝试学习如何让Arduino通过SPI与XBee PRO S3B模块通信。作为一个问候世界,我想我会尝试阅读有关XBee模块配置的一些信息(特别是它的DL设置)。读取此信息需要首先通过SPI发送一个8字节长度的命令。
我使用Arduino SPI库的SPI.transfer()
函数一次发送一个字节的命令。看起来我能够发送第一个字节就好了 - 问题是代码似乎在第二次调用SPI.transfer()
时冻结。
在我的代码中,我将命令的数据存储在名为AT_getDL_CMD
的字节数组中,其长度(8)存储在AT_getDL_LEN
中。以下是代码的相关部分:
// start the SPI library:
SPI.beginTransaction(SPISettings(3000000, MSBFIRST, SPI_MODE0));
// initalize the pins:
pinMode(SPI_ATTN, INPUT);
pinMode(SPI_SSEL, OUTPUT);
digitalWrite(SPI_SSEL, LOW);
// wait a little bit for the radio to be ready:
delay(1000);
Serial.println("Sending getDL API command");
for (int i = 0; i < AT_getDL_LEN; i++) {
Serial.print(SPI.transfer(AT_getDL_CMD[i]));
Serial.print(", ");
}
我得到的输出是:
发送getDL API命令
0,
所以看起来循环运行一次迭代但在第二次迭代时调用SPI.transfer()
时冻结。
可能导致这种情况的原因是什么?它是否更有可能成为Arduino端或XBee端的问题?我是否正确使用SPI库?