这个是我们在Arduino内部可以使用的所有的SPI函数
封装的类,你使用之前的初始化,引脚变动什么的
代码语言:javascript复制https://www.arduino.cc/en/Reference/SPI
1.begin() 该功能用于初始化SPI通信。 语法:SPI.begin() 参数:无; 返回值:无;
这个函数是使用SPI必须使用的一个函数
2.end() 该功能用于关闭SPI通信。 语法:SPI.end() 参数:无; 返回值:无;
这个函数用于释放SPI引脚
3.setBitOrder() 设置数据传输顺序。 语法:SPI.setBitOrder(order) 参数: order,传输顺序,取值为: ~ LSBFIRST,低位在前; ~ MSBFIRST,高位在前。 返回值:无;
4.setClockDivider() 设置通信时钟。时钟信号由主机产生,从机不用配置。但主机的SPI时钟频率应该在从机允许的处理速度范围内。 语法:SPI.setClockDivider(divider) 参数: divider,SPI通信的时钟是由系统时钟分频得到的。可使用的分频配置为: ~ SPI_CLOCK_DIV2,2分频; ~ SPI_CLOCK_DIV4,4分频(默认配置); ~ SPI_CLOCK_DIV8,8分频; ~ SPI_CLOCK_DIV16,16分频; ~ SPI_CLOCK_DIV32,32分频; ~ SPI_CLOC K_DIV64,64分频; ~ SPI_CLOCK_DIV128,128分频; 返回值:无;
5.setDataMode() 该功能用于设置数据模式。 语法:SPI.setDataMode(mode) 参数: mode,可配置的模式,包括: ~ SPI_MODE0; ~ SPI_MODE1; ~ SPI_MODE2; ~ SPI_MODE3; 返回值:无; 注意点: SPI四种模式中,SPI的相位(CPHA)和极性(CPOL)分别可以为0或者1,对应的4种组合构成了4种模式: ~ SPI_MODE0:CPOL=0,CPHA=0; ~ SPI_MODE1:CPOL=0,CPHA=1; ~ SPI_MODE2:CPOL=1,CPHA=0; ~ SPI_MODE3:CPOL=1,CPHA=1; 时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(1是空闲时高电平,0是空闲时低电平)。 时钟相位CPHA:即SPI在SCLK第几个边沿开始采样(0是第一个边沿开始,1是第二个边沿开始)
6.transfer() 该功能用于传输1B的数据,参数为发送的数据,返回值为接收到的数据。SPI是全双工通信,因此每发送1B的数据,也会接收到1B的数据。 语法:SPI.transfer(val) 参数: val,要发送的字节数据。 返回值:从机返回的1B数据;
7.transfer16() 该功能用于传输2B的数据,参数为发送的数据,返回值为接收到的数据。 语法:SPI.transfer16(val) 参数: val,要发送的16位(uint16_t)数据。 返回值:从机返回的2B数据; 注意点:发送的uint16_t数据,其实底层也是分开两个字节分别发送两次,接收到的2B数据,也会重新组装成uint16_t数据;
8.transferBuf() 该功能用于传输一个缓冲区数据,参数为发送的缓冲区buf。 语法:SPI.transfer(buf,count) 参数: buf,要发送的缓冲区(uint8_t*)数据。 count,缓冲区的大小。 返回值:无; 注意点:虽然没有返回值,但是从从机传输回来的数据会替换掉buf缓冲区的数据,所以调用完整个方法之后,buf里面的数据就是从机返回的数据;
9.pins() 该功能用于切换SPI引脚映射,需要在SPI.begin()之前调用SPI.pins(6,7,8,0)。 语法:SPI.pins(sck, miso, mosi, ss) 参数: sck,时钟引脚,固定为6; miso,主设备输入,从设备输出引脚,固定为7; mosi,主设备输出,从设备输入,固定为8; ss,使能信号引脚,固定为0。 返回值:无;
在这里我再写一次SPI的接口一些说明:
串行外围设备接口(SPI)是微控制器使用的同步串行数据协议,用于在短距离内快速与一个或多个外围设备进行通信。它也可以用于两个微控制器之间的通信。
通过SPI连接,总会有一个主设备(通常是微控制器)来控制外围设备。通常,所有设备共有三行:
- MISO(Master In Slave Out)-从站线路,用于向主机发送数据,
- MOSI(Master Out Slave In)-用于将数据发送到外围设备的主线,
- SCK(串行时钟)-同步主设备生成的数据传输的时钟脉冲
每条设备专用一条线:
- SS(从设备选择)-主设备可用来启用和禁用特定设备的每个设备上的引脚。
当器件的从选择引脚为低电平时,它与主机通信。较高时,它将忽略主节点。这使你可以让多个SPI器件共享相同的MISO,MOSI和CLK线。
要为新的SPI器件编写代码,需要注意以下几点:
- 你的设备可以使用的最大SPI速度是多少?这由SPISettings中的第一个参数控制。如果你使用的芯片的额定频率为15 MHz,则使用15000000。Arduino将自动使用等于或小于SPISettings的数字的最佳速度。
- 数据首先移入最高有效位(MSB)还是最低有效位(LSB)?这由第二个SPISettings参数MSBFIRST或LSBFIRST控制。大多数SPI芯片使用MSB优先数据顺序。
- 数据时钟为高电平还是低电平时是否空闲?采样是在时钟脉冲的上升沿还是下降沿上?这些模式由SPISettings中的第三个参数控制。
SPI标准是宽松的,每个设备在实现上都略有不同。这意味着编写代码时必须特别注意设备的数据表。
一般来说,有四种传输方式。这些模式控制数据是否在数据时钟信号的上升沿或下降沿移入和移出(称为时钟相位),以及在高电平或低电平时时钟空闲(称为时钟极性)。根据该表,四种模式将极性和相位组合在一起:
时钟极性,时钟相位,输出边沿,数据抓取