SPI库 – 太极创客 |
您所在的位置:网站首页 › spidemandba › SPI库 – 太极创客 |
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的连线:
![]() 您可以根据自己的开发板类型进行连线 基于AVR的板上的从选择(SS)引脚的说明 所有基于AVR的板都有一个SS引脚,当它们充当由外部主机控制的从机时,该引脚很有用。由于该库仅支持主模式,因此该引脚应始终设置为OUTPUT,否则硬件会自动将SPI接口设置为从模式,从而使库无法工作。 此外,您也可以将任何引脚用作从设备的选择引脚(SS)。例如,Arduino以太网扩展板使用引脚10控制到板载SD卡的SPI连接,并使用引脚10控制到以太网控制器的连接。
两块UNO开发板通过SPI通讯 两块Arduino UNO R3开发板通过SPI进行通讯,则需要其中一块作为主设备,另外一块(或多块)作为从设备,同时两块开发板需要共地连接. 电路连接
示例程序 主设备 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 |