Arduino(3) Mega2560和外部设备SPI通信

本文详细介绍了Arduino Mega2560如何通过SPI与外部设备通信,包括SPI设置、类库成员函数的使用以及通信示例,如与SPI从设备的连接配置和数据传输操作。
摘要由CSDN通过智能技术生成
前言

这篇文章主要讲Arduino串行通信里的SPI通信。SPI(Serial Peripheral Interface,串行外设接口)高速通信接口一般用在于对于数据量要求比较大的设备或者场景里,例如SD卡,网络芯片,而Arduino支持SPI总线,从而可以和一些使用SPI总线的设备通信,一根SPI总线上可以连接多个SPI从设备。

SPI设置

  • 在一个SPI设备中,通常会有4个引脚。SPI总线有主从机之分,主机负责输出时钟信号及选择通信的从设备。时钟信号会通过主机的SCK引脚输出,提供给通信从机使用。而从机的选择由从机CS引脚来决定,CS引脚为低电平时,该从机被选中,CS引脚拉高,该从机被断开。数据的收发则通过MISO和MOSI引脚进行。Arduino Mega2560开发板上引脚位置分别为:MOSI–51脚,MISO–50脚,SCK–52脚,SS–53脚。或者利用6针的ICSP引脚来使用SPI总线。
    MISO(Master In Slave Out):主机数据输入,从机数据输出
    MOSI(Master Out Slave In):主机数据输出,从机数据输入
    SCK(Serial Clock):用于通信同步的时钟信号,由主机产生
    SS(Slave Select)或CS(Chip Select):从机使能信号,由主机控制

SPI类库成员函数

1. SPI.begin()

初始化SPI通信,调用该函数后,SCK/MOSI/SS引脚将被设置为输出模式,且SCK/MOSI引脚拉低,SS引脚拉高。

2. SPI.end()

关闭SPI总线通信

3. SPI.setBitOrder(order)

设置传输顺序。order:传输顺序,LSBFIRST,低位在前;MSBFIRST,高位在前

4. SPI.setClockDivider(divider)

设置通信时钟,由主机产生,从机不用配置。divider:SPI通信的系统时钟分频得到,可选配置有SPI_CLOCK_DIV2、SPI_CLOCK_DIV4(默认配置)等,最大可达128分频

5. SPI.setDataMode(mode)

设置数据模式。mode:可配置的模式,可选项有SPI_MODE0、SPI_MODE1、SPI_MODE2、SPI_MODE3

6. SPI.transfer(val)

传输1Byte的数据,SPI是全双工通信,所以发送1B的数据,也会接收到1B的数据。val:要发送的字节数据。

SPI通信示例

  • 下面这个例子是我用Arduino通过SPI通信控制下变频模块产生两级变频。这里有两个SPI从设备PLL1和PLL2,所以这里我需要重新定义SPI从设备的使能引脚,如下图代码中所示,PLL1定义为47脚,PLL2定义为48脚;SCK脚则使用Mega2560默认的52引脚;因为我这里只需要从Arduino发送数据到从设备,并不需要从设备里读取数据,所以我只使用到了MOSI 51引脚,MISO引脚就不需要使用。剩下的就是将各个引脚和从设备上对应的引脚相连就行了。如果只有一个从设备的话,可以直接使用Mega2560上默认的SPI引脚。
#include <SPI.h>                 //引入SPI类库
const int PLL1 = 47;             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值