考虑下面的最小示例,我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)。