LOADING

加载过慢请开启缓存 浏览器默认开启

arduino的spi通信

2024/12/29 arduino arduino

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
返回值