ARM嵌入式学习笔记(10)SPI通信
SPI简介
SPI 协议是摩托罗拉公司开发的一种高速的,全双工,同步的通信总线,使用四根线进行通信,具有简单易用,通讯速度高的特点。SPI 总线上可以挂载多个设备,这些设备被区分成主设备(Master)和从设备(Slave),主设备通过时钟线和片选线对从设备进行控制。
SPI 协议所使用到的引脚及其功能见下表
SPI 是一种全双工的通信协议,主设备和从设备通信时,两端的收发是同步进行的,即主设备和从设备在向对方发送数据的同时,也在接收对方发来的数据。
SPI 的通信过程如下:
- 主设备将要进行通讯的从设备的 SS/CS 片选拉低,
- 主设备通过 SCK 向从设备提供同步通讯所需要的时钟信号。
- 主设备通过 MOSI 向从设备发送 8 位数据,同时通过 MISO 接收从设备发来的 8 位数
据。 - 通信结束,主设备拉高 SS/CS 片选。
SPI在CubeMX中的配置
这里我们只驱动WS2812,所以选择主机发送模式即可
WS2812代码
//ws2812.h
#ifndef __WS2812_H__
#define __WS2812_H__
#include <stdint.h>
// 编码 0 : 11000000
#define CODE_0 0xC0
// 编码 1 : 11111000
#define CODE_1 0xF8
/*ws2812b灯珠数量*/
#define WS2812B_AMOUNT 9
typedef struct
{
uint8_t R;
uint8_t G;
uint8_t B;
} tWs2812bCache_TypeDef;
/**
* @brief HSV颜色空间
*/
typedef struct {
float h; // 色调H(hue) 0~360° {R(0°),G(120°),B(240°)}
float s; // 饱和度S(saturation) 0~1.0
float v; // 明度V(value) 0~1.0
}color_hsv_t;
typedef