arduino的spi
串行外围设备接口(SPI)是微控制器使用的同步串行数据协议,用于在短距离内快速与一个或多个外围设备进行通信。它也可以用于两个开发板之间相互的通信。
使用SPI连接,总是有一个主设备(通常是微控制器)来控制外围设备。通常,所有设备共用以下三条线:
MISO(Master In Slave Out)-从机线路,用于向主机发送数据,
MOSI(Master Out Slave In)-主机线路,用于向外围设备发送数据,
SCK(串行时钟)-同步主机产生的数据传输的时钟脉冲
每个从设备专用的一条线:
SS(从设备选择)-主设备可用此引脚来决定启用或禁用指定设备。
当从设备的CS引脚为低电平时,它与主机通信。同理CS引脚电平为高时,它将忽略连接到CS引脚的设备, 不与之进行数据交互。
文件宏定义:
//这个为SPI头文件
#include <SPI.h>
//
主机模式
spi初始化
SPI.begin()
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
返回值 | 无 | 无 | 无 |
初始化SPI通信,调用该函数后,SCK/MOSI/SS引脚将被设置为输出模式
且SCK/MOSI引脚拉低,SS引脚拉高
spi模式自定义初始化
SPI.beginTransaction(SPISettings mySettting(speedMaximum, dataOrder, dataMode));
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
SPISettings mySettting(speedMaximum, dataOrder, dataMode)
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))//默认设置
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
speedMaximum | int | 最高的通讯速度 | 看自己spi的芯片通信速率 |
dataOrder | int | 数据传输顺序选择 | LSBFIRST(0)//低位在前 MSBFIRST(1)//高位在前 |
dataMode | int | spi通信模式 | SPI_MODE0 (0x00) SPI_MODE1 (0x01) SPI_MODE2 (0x02) SPI_MODE3 (0x03) |
返回值 | 无 | 无 | 无 |
模式 时钟极性 (CPOL) 时钟相位 (CPHA) 输出边缘 数据捕获
SPI_MODE0 0 0 下降 上升
SPI_MODE1 0 1 上升 下降
SPI_MODE2 1 0 上升 下降
SPI_MODE3 1 1 下降 上升
使用SPI.beginTransaction()函数初始化spi总线,该函数的参数
停止全部spi总线
SPI.end()
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
返回值 | 无 | 无 | 无 |
(在初始化时设置的各个引脚输出模式将不会改变)。
停止部分使用SPI总线。
SPI.endTransaction()
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
返回值 | 无 | 无 | 无 |
通常在禁用某引脚上的从设备后调用此函数 | |||
以允许其他库使用SPI总线。 |
设定spi传输是高位还是低位
SPI.setBitOrder(order)
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
order | int | 数据传输顺序选择 | LSBFIRST(0)//低位在前 MSBFIRST(1)//高位在前 |
返回值 | 无 | 无 | 无 |
设定spi传输时钟
SPI.setClockDivider(divider)
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
divider | int | 通信时钟系统时钟分频 | SPI_CLOCK_DIV2(2)//2分频 SPI_CLOCK_DIV4(4)//4分频 SPI_CLOCK_DIV8(8)//8分频 SPI_CLOCK_DIV16(16)//16分频 SPI_CLOCK_DIV32(32)//32分频 SPI_CLOCK_DIV64(64)//64分频 SPI_CLOCK_DIV128(128)//128分频 |
返回值 | 无 | 无 | 无 |
设定spi传输模式
SPI.setDataMode(mode)
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
Mode | int | spi通信模式 | SPI_MODE0 (0x00) SPI_MODE1 (0x01) SPI_MODE2 (0x02) SPI_MODE3 (0x03) |
返回值 | 无 | 无 | 无 |
SPI_MODE0(上升沿采样,下降沿置位,SCK闲置时为0),
SPI_MODE1(上升沿置位,下降沿采样,SCK闲置时为0),
SPI_MODE2(下降沿采样,上升沿置位,SCK闲置时为1),
SPI_MODE3(下降沿置位,上升沿采样,SCK闲置时为1)。
设定spi输入还有输出
SPI.transfer(val)
SPI.transfer16(val16)
SPI.transfer(buffer, size)
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
val | uint8_t | 通过总线发送的字节 | 无 |
val16 | int | 通过总线发送的两个字节变量 | 无 |
buffer | int | 要传输的数据数组 | 无 |
size | int | 传输数据的字节长度(单位字节) | 无 |
返回值 | int | 返回读取的数据 | 无 |
SPI通讯是在中断
SPI.usingInterrupt(interruptNumber)
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
interruptNumber | int | 中断编号 | 支持中断的io |
返回值 | 无 | 无 | 无 |