打印
[应用相关]

STM32之SPI详解

[复制链接]
44|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-11-27 16:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
概念
串行外设接口(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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1949

主题

15676

帖子

12

粉丝