SPI库 – 太极创客

您所在的位置:网站首页 spidemandba SPI库 – 太极创客

SPI库 – 太极创客

2024-01-20 08:01| 来源: 网络整理| 查看: 265

SPI库

SPI接口简介

如何接线

两块UNO开发板通过SPI通讯

使用SPI协议控制AD5206数字电位器

SPI库函数

您可以使用Arduino官方自带的SPI库将Arduino作为主设备,从而与其他SPI设备(从)进行SPI通信或多设备间的SPI通讯。

 

使用此库之前,您需要使用以下语句进行引入

Arduino 1 #include

在开始之前,请大家建立一个主从的概念,即一个主设备,多个从设备,主设备可以决定与任意一个从设备进行通讯

 

SPI接口简介

 

串行外围设备接口(SPI)是微控制器使用的同步串行数据协议,用于在短距离内快速与一个或多个外围设备进行通信。它也可以用于两个开发板之间相互的通信。

使用SPI连接,总是有一个主设备(通常是微控制器)来控制外围设备。通常,所有设备共用以下三条线:

MISO(Master In Slave Out)-从机线路,用于向主机发送数据, MOSI(Master Out Slave In)-主机线路,用于向外围设备发送数据, SCK(串行时钟)-同步主机产生的数据传输的时钟脉冲

 

每个从设备专用的一条线:

SS(从设备选择)-主设备可用此引脚来决定启用或禁用指定设备。

当从设备的CS引脚为低电平时,它与主机通信。同理CS引脚电平为高时,它将忽略连接到CS引脚的设备, 不与之进行数据交互。

 

如何接线

为了方便大家参考,下表列出了不同Arduino板上的SPI的连线:

 

各开发板SPI引脚定义 Arduino SPI协议 太极创客各开发板SPI引脚定义

您可以根据自己的开发板类型进行连线

ICSPHeader Arduino SPI协议 太极创客

基于AVR的板上的从选择(SS)引脚的说明

所有基于AVR的板都有一个SS引脚,当它们充当由外部主机控制的从机时,该引脚很有用。由于该库仅支持主模式,因此该引脚应始终设置为OUTPUT,否则硬件会自动将SPI接口设置为从模式,从而使库无法工作。

此外,您也可以将任何引脚用作从设备的选择引脚(SS)。例如,Arduino以太网扩展板使用引脚10控制到板载SD卡的SPI连接,并使用引脚10控制到以太网控制器的连接。

 

 

两块UNO开发板通过SPI通讯

两块Arduino UNO R3开发板通过SPI进行通讯,则需要其中一块作为主设备,另外一块(或多块)作为从设备,同时两块开发板需要共地连接.

电路连接

UNO板间通讯(SPI) Arduino SPI协议 太极创客UNO板间通讯(SPI)

Arduino 1234567               UNO(主)       UNO(从)(MOSI)          11         11(MISO)          12         12(SCK)           13         13(CS)            10         10GND            GND         GND 

 

示例程序 主设备

Arduino 1234567891011121314151617181920212223242526272829303132333435363738394041 /**********************************************************************  程序名称/Program name     : SPI主机通讯  团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)  作者/Author               : Dapenson  日期/Date(YYYYMMDD)     : 2020/06/23  程序目的/Purpose          :  演示如何使用UNO(主)和UNO(从)之间进行SPI通讯  -----------------------------------------------------------------------  修订历史/Revision History  日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description  -----------------------------------------------------------------------  其它说明:  本程序来源于以下链接,由Dapenson进行整理和注释,  目的是为了让初学者更好的理解和学习相关内容   http://suo.im/5Hd8cE***********************************************************************/ #include  void setup () {  Serial.begin(9600); //初始化串口波特率  digitalWrite(SS, HIGH); // 禁用从设备HIGH为禁用  SPI.begin ();  SPI.setClockDivider(SPI_CLOCK_DIV8);//设置SPI的时钟为八分之一} void loop () {  char c;  digitalWrite(SS, LOW); //启用从设备  // 发送测试的字符串  for (const char * p = "Hello, world!\r" ; c = *p; p++) {    //太极创客团队 / Taichi-Maker (www.taichi-maker.com)    SPI.transfer (c);    Serial.print(c);  }  digitalWrite(SS, HIGH); // 发送完毕后再次禁用从设备  delay(2000);}  

从设备

Arduino 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 /**********************************************************************  程序名称/Program name     : SPI从机通讯  团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)  作者/Author               : Dapenson  日期/Date(YYYYMMDD)     : 2020/06/23  程序目的/Purpose          :  演示如何使用UNO(主)和UNO(从)之间进行SPI通讯  -----------------------------------------------------------------------  修订历史/Revision History  日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description  -----------------------------------------------------------------------  其它说明:  本程序来源于以下链接,由Dapenson进行整理和注释,  目的是为了让初学者更好的理解和学习相关内容   http://suo.im/5Hd8cE***********************************************************************/#include char buff [50];volatile byte indx;volatile boolean process; void setup () {  Serial.begin (9600);  pinMode(MISO, OUTPUT); //将MISO设置为输出以便数据发送主机  SPCR |= _BV(SPE); //在从机模式下打开SPI通讯  indx = 0; // 初始化变量  process = false;  SPI.attachInterrupt(); //打开中断}  ISR (SPI_STC_vect) // SPI中断程序{  byte c = SPDR; // 从SPI数据寄存器读取字节  if (indx Arduino 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 /**********************************************************************  程序名称/Program name     : DigitalPotControl  团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)  作者/Author               : Dapenson  日期/Date(YYYYMMDD)     : 2020/06/30  程序目的/Purpose          :    本示例演示了如何使用SPI控制AD5206数字电位器。  AD5206可使用SPI进行控制,发送命令时请发送两个数值,  一个是通道号(0-5),另一个是该通道的映射电阻值(0-255)。  -----------------------------------------------------------------------  修订历史/Revision History    日期/Date    作者/Author      参考号/Ref    修订说明/Revision Description  -----------------------------------------------------------------------  其它说明:  电路:   AD5206的所有A引脚都连接到+ 5V   AD5206的所有B引脚都接地   每个W引脚与GND串联一个LED和一个220欧姆电阻   CS-到数字引脚10(SS引脚)   SDI-到数字引脚11(MOSI引脚)   CLK-至数字引脚13(SCK引脚)    注意:   本程序来源于以下地址, 由Dapenson进行整理注释   https://www.arduino.cc/en/Tutorial/DigitalPotControl  ***********************************************************************/ // 引入SPI库(Arduino自带,无需下载安装)#include  // 将引脚10设置为从设备数字电位器的使能引脚:const int slaveSelectPin = 10; void setup(){    // 将slaveSelectPin设置为输出:    pinMode(slaveSelectPin, OUTPUT);    // 初始化SPI    SPI.begin();} void loop(){    // 循环数字电位器的六个通道:    for (int channel = 0; channel


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3