两个arduinSPI通信实验

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.电路连接图:

SPI_Master_to_Slave_photo.jpg

7.最后把电脑和作为主机的arduino的板子相连接,效果图是:

猜你喜欢

转载自blog.csdn.net/qq_42099097/article/details/82152907