1.首先,从这个官方网址上可以查找到相应的SPI通信的了解和相应 的配置。
https://www.arduino.cc/en/Reference/SPI【这个最好用谷歌浏览器打开,就可以直接翻译成中文了】
2.了解完相应的配置之后,就开始进行实验了!
3.ardunio主机的代码是:
#include<SPI.h>//这个是SPI通信的一个头文件;
char buf[100];
volatile byte pos;//volatile是一个类型修饰符(type specifier).
//volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
volatile boolean process_it;
void setup(void)
{
Serial.begin(9600);
//design GPIO
pinMode(MISO,OUTPUT);//MISO用于向主设备发送数据的Slave行,
//set the receive statement
SPCR |=_BV(SPE);
//ready to receive the interruption
pos = 0;//清空缓存区
process_it = false;
//start the interruption
SPI.attachInterrupt();
}
ISR(SPI_STC_vect)//这个函数的主要的作用是对读取到的数据进行处理,然后以‘\n’为分界符号,然后对数据进行输出。
{
byte c = SPDR;//从SPI寄存器中获取数据
if(pos<sizeof(buf))
{
buf[pos++] = c;
if(c=='\n')
{
process_it = true;//这个就是对这一输出过程的控制。
}
}
}
void loop(void)
{
if(process_it)
{
buf[pos] =0;
Serial.println(buf);
pos = 0;
process_it = false;
}
}
//这些包括了我对这个代码的理解和掌握。
4.arduino从机的代码是:
#include<SPI.h>//这个是SPI通信的一个库
void setup()
{
Serial.begin(9600);
digitalWrite(SS,HIGH);
SPI.begin();
}
void loop(void)
{
char c;
digitalWrite(SS,LOW);
for(const char *p = "hello,world!\n";c = *p;p++)
{
SPI.transfer(c);
Serial.print(c);
}
//取消从机
digitalWrite(SS,HIGH);
delay(1000);
}
5.把相应的程序烧到相应的arduino的板子后,然后进行接下来的电路的连接。
6.电路连接图:
7.最后把电脑和作为主机的arduino的板子相连接,效果图是: