考虑下面的最小示例,我pinMode在调用SPI函数之前进行了设置:
#include <SPI.h>
void setup() {
pinMode(10, OUTPUT);
SPI.begin(10);
SPI.setDataMode(10,SPI_MODE1);
}
void loop() {
delay(1000);
SPI.transfer(10,1);
}
现在,当SPI.transfer(10,1)被调用时loop(),我总是看到从机选择的引脚下降到1.65V,而不是应有的0!(见下图)

如果我们不打电话pinMode(),像这样:
#include <SPI.h>
void setup() {
SPI.begin(10);
SPI.setDataMode(10,SPI_MODE1);
}
void loop() {
delay(1000);
SPI.transfer(10,1);
}
调用时,我们得到了期望的结果SPI.transfer:

这是一个错误还是您对此行为有解释?
非常感谢您的时间和兴趣!
Ja,您是对的,偶然地我两次调用setDataMode()。明天我将测试SPI.setDataMode(10,SPI_MODE1);的效果。但是,为什么调用pinMode()具有这种效果仍然不清楚?@Gerben
—
newandlost 2014年
@Gerben我修改了我的帖子
—
newandlost 2014年
SPI.setDataMode(10, SPI_MODE1);吗?同样,只有第二个有用,因为begin()调用setDataMode。查看源代码,看起来SPI库不会改变您指定的引脚(尽管我不知道ARM)。