概念
串行外设接口(Serial Peripheral Interface Bus,SPI)
是一种用于芯片通信的同步串行通信接口规范,主要应用于单片机系统中的信号传递。类似的技术还有I2C等。展托罗拉公司于20世纪80年代中期首先开发出此传输接口,之后逐渐发展为行业规范之一。它的典型应用有闪存、EEPROM、SD卡与液晶显示器。
SPI设备之间使用全双工模式通信,是一个主机和一个或多个从机的主从模式。主机负责初始化帧,这个数据传输帧可以用于读/写两种操作,片选线路可以从多个从机选择一个来响应主机的请求。
有时SPI接口被称作四线式接口,这是为了与其他不同线制的数据传输接口加以区分。SPI准确来讲应为“同步串行接口”,但是它又与同步串行接口协议(SSI)是完全不同的两种协议。虽然SSI也是一个四线式同步通信协议,但是它使用差分信号,而且仅提供一个单工通信信道。于此相对地,SPI是一个单主机多从机的通信接口。
SPI是一种事实标准,也就是说这种规范没有对应的技术标准。因此各个厂家生产的SPI器件配置不一样,不一定有互操作性。
接口
SPI总线规定了4个保留逻辑信号接口:
SCLK (SerialClock):串列时脉,由主机发出
MOSI (Master Output,Slave Input):主机输出,从机输入信号(数据由主机发出)
MISO (Master Input,Slave Output):主机输入,从机输出信号(数据由从机发出)
SS (Slave Select):片选信号,由主机发出,一般是低电位有效
数据传输
为了开始通信,总线上的主设备将某个从设备的SS线置为低电平,来选中这个从设备,设备需要使用从设备支持的频率来配置时钟,这个频率最高为几兆赫兹左右。
在每个SPI时钟周期内,都会发生全双工数据传输。主设备在MOSI线上发送一个位,从设备读取它,同时从机在MISO线上发送一位数据,主机读取它。即使只有单向数据传输的目的,主从机之间的通信工作方式仍然是双工的。
工作模式
STM32 要与具有 SPI 接口的器件进行通信,就必须遵循 SPI的通信协议。每一种通信协议都有各自的读写数据时序,当然 SPI 也不例外。SPI 通信协议就具备 4种工作模式,在讲这4 种工作模式前,首先先知道两个单词 CPOL和 CPHA。
CPOL,详称 Clock Polarity,就是时钟极性。主从机没有数据传输的时候即空闲状态,SCK 线的电平状态,假如空闲状态是高电平,CPOL=1;若空闲状态时低电平,那么CPOL=0。
CPHA,详称 Clock Phase,就是时钟相位。在这里先科普一下数据传输的常识: 同步通信时,数据的变化和采样都是在时钟边沿上进行的,每一个时钟周期都会有上升沿和下降沿两个边沿,那么数据的变化和采样就分别安排在两个不同的边沿,由于数据在产生和到它稳定是需要一定的时间,那么假如我们在第1个边沿信号把数据输出了,从机只能从第 2 个边沿信号去采样这个数据。
由于 CPOL和 CPHA 都有两种不同状态,所以 SPI分成了4种模式。我们在开发的时候,使用比较多的是模式 0和模式 3
如何编程
1、SPI_Init(); //初始化SPI
2、SPI_Cmd(); //使能SPI
3、SPI_I2S_ITConfig(); //使能SPI中断
4、SPI_I2S_DMACmd(); //使能SPI-DMA
5、SPI_I2S_SendData(); //SPI发送数据
6、SPI_I2S_ReceiveData(); //SPI接收数据
7、SPI_I2s_GetFlagstatus(); //获取SPI状态,比如接收缓冲区是否有数据等
8、SPI_I2S_ClearFlag(); //清除SPI状态
9、SPI_I2S_GetITStatus(); //获取SPI中断标志位,用于判断中断触发源
10、SPI_I2S_ClearITPendingBit(); //清除中断标志位
ST7735
ST7735是262K彩色图形型TFT-LCD的单芯片控制/驱动器。支持SPI协议。显存最大可以存储132*162*18bits数据ST7735S/ST7735R是ST7735的迭代型号,支持屏幕旋转命令。
MCU与ST7735S控制器通过SPI通信
ST7735控制LCD液晶屏显示内容
SPI时序
CSX:片选信号,低电平有效
SDA:SPI的MOSI信号线,数据从MCU发给ST7735
D/CX:数据/命令选择信号,发送命令时为0,发送数据时为1
SCL:SPI的SCK信号线
写命令
1.CS=0
2.DC=0
3.(SPI_WRITE)
4.CS=1
写数据
1.CS=0
2.DC=1
3.(SPI_WRITE)
4.CS=1
SPI_WRITE
1.SCL=0
2.SDA=Xbit7
3.SCL=1
4.SCL=0
5.SDA=Xbit6
6........
7.SDA=Xbit0
8.SCL=1
控制流程
复位时序
初始化、参数配置
厂家会提供好,我们了解做了哪些步骤即可,具体到实际情况中再修改
1.执行0x11命令,退出休眠
2.执行0xB1、0xB2、0xB3、0xB4在多个模式下配置刷新率
3.执行0xC0、0xC1、0xC2、0xC3、0xC4在多个模式下配置工作电平
4.执行0x36设置显存数据映射模式
5.执行0xE0、0xE1校准伽马值
6.执行0x3A,设置像素格式为RGB565
7.执行0x29,开启显存到LCD显示
控制显存
1.0x2A、0x2B设置行列选框
2.0x2C写显存命令
3.写入数据
显示hello world
1.初始化显示屏
2.清屏,设置背景为绿色
3.选框,字母'h'所对应的方框4.取字模,根据字模像素点排布更新显存内容
5.下一个字母选框'e'
6...........
7.结束
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/orionyl/article/details/143952402
|