通信接口

两块Arduino之间通过SPI通信

字号+ 作者:duino123.com 来源:未知 2016-06-01 13:02 我要评论( )

两块Arduino之间通过SPI通信

两块Arduino之间通过SPI通信

使用两块Arduino UNO,一主一从。

Arduino UNO A: SPI 主机
Arduino UNO B: SPI 从机

连线方式:
      A--------------------B
(10) SS---------->(10) SS
(11) MOSI------->(11) MOSI
(12) MISO<-------(12) MISO
(13) SCLK------->(13) SCLK

SPI_Master_to_Slave_photo.jpg

主机从机分别写入如下代码:

从机:

#include <SPI.h>
 
void setup (void)
{
  Serial.begin(9600);        // 开始串口通讯
  digitalWrite(SS, HIGH);
  SPI.begin ();              // PI通讯开始
  //SPI.setClockDivider(SPI_CLOCK_DIV8); //??
}
 
void loop (void)
{
  char c;
 
  // 片选为从机
  digitalWrite(SS, LOW);    // SS - pin 10
 
  // 发送字串
  for (const char * p = "Hello, world!\n" ; c = *p; p++) {
    SPI.transfer (c);
    Serial.print(c);
  }
 
  // 取消从机
  digitalWrite(SS, HIGH);
  delay (1000);
}

主机:
#include <SPI.h>
 
char buf [100];
volatile byte pos;
volatile boolean process_it;
 
void setup (void)
{
  Serial.begin (9600);
 
  // have to send on master in, *slave out*
  pinMode(MISO, OUTPUT);
 
  // 设置为接收状态
  SPCR |= _BV(SPE);
 
  // 准备接受中断
  pos = 0;   // 清空缓冲区
  process_it = false;
 
  // 开启中断
  SPI.attachInterrupt();
}
 
 
// SPI 中断程序
ISR (SPI_STC_vect)
{
  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;
  } 
}


如需更详细资料,如有好资源分享,请加入QQ交流群:214461008

欢迎阅读,欢迎转载,不用注明出处!本站只提供入门和进阶资料,做您学习的小伙伴!

老司机也欢迎光临指导!有好内容请加群:214461008 不要看声明了,看内容吧!

相关文章
  • 常见的几种arduino型号的IIC引脚定义

    常见的几种arduino型号的IIC引脚定义

    2016-05-29 14:40

  • Arduino软串口的使用

    Arduino软串口的使用

    2016-05-04 15:27

  • [2016.05.04]Arduino串口从基础到高级最全面教程

    [2016.05.04]Arduino串口从基础到高级最全面教程

    2016-05-05 14:14

  • 手机APP通过蓝牙控制Arduino上的通讯实验及完整例程

    手机APP通过蓝牙控制Arduino上的通讯实验及完整例程

    2016-05-02 22:13

网友点评
Arduino