大家好,我是 杰哥编程
一文彻底带你搞懂SPI通信原+TFT彩屏控制原理
驱动ic : st7735s
(搞不懂立刻改名杰弟编程)
代码已经放在我的gitee仓库了 记得下载
欢迎关注我的Gitee仓库:gitee.com/wrj12138/em…
uart
1 首先来讲讲什么是uart?
通用串行异步通讯协议
UART没有时钟信号,无法控制何时发送数据,
也无法保证双发按照完全相同的速度接收数据
所以UART为每个字节添加额外的起始位和停止位,
帮助同步接收数据 且事先达成波特率共识 实现同步
如9600 115200
2 这是uart传输一个字节的时序图
Note:图中二进制11001010不等于16进制0x53 why?
因为串口通常会先发送最低有效位 大家可以看出串口什么缺点吗?
串口挺好 但缺点就是起始位和停止位要额外开销
spi
1 SPI是啥?
MISO也可以是SIMO,DOUT,DO,SDO或SO(在主机端);
MOSI也可以是SOMI,DIN,DI,SDI或SI(在主机端);
NSS也可以是CE,CS或SSEL;
SCLK也可以是SCK
根据你的配置 有2种 时钟信号的上升沿或下降沿
根据前面讲到的串口通信方式 可以加强对spi的通讯机制的理解
Note: SPI是“全双工”(具有单独的发送和接收线路),
因此可以在同一时间发送和接收数据,另外SPI的接收硬件可以是一个简单的移位寄存器。
这比异步串行通信所需的完整UART要简单得多,并且更加便宜
2 SPI通信协议
不过没必要纠结 基本默认低电平空闲,上升沿采集
放个图看看就知道了
2. 主机时钟频率由单片机系统频率变化而来 你想要多少就多少 只要能配的到,
客机的频率来自于主机 但不是想要多少就多少 一般客机手册里会讲到可接受时钟频率范围
3. 如何多从机 靠第四条线 NSS ,就是个gpio输出口
每个客机有独立的NSS线 不重复
拉低哪个客机的CS 就跟哪个客机传输数据
目前先了解这种接法就行了
如果以后你们接触了一些行业
可能会有非常花式的接法
3 SPI优缺点
使SPI作为串行通信接口脱颖而出的原因很多;
全双工串行通信;
高速数据传输速率。
简单的软件配置;
极其灵活的数据传输,不限于8位,它可以是任意大小的字;
非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。
从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
通常仅支持一个主设备;
需要更多的引脚(与I2C不同);
没有定义硬件级别的错误检查协议;
与RS-232和CAN总线相比,只能支持非常短的距离;
SPI-1.44TFT彩屏
1 TFT1.44SPI彩屏色彩
不扯那么多了 反正就是tft屏显示是彩色的 用的彩色编码方式是rgb565 和我们之前玩的lcd1602 i2c_oled画图写字编码是一样的 只是多了一些颜色深度而已。(RGB,CMY,HSV,HSL,Lab,YUV等等)
2 TFT1.44SPI彩屏引脚
没有精准定时的情况下,io软模拟快了or慢了怎么办 ?
3 TFT1.44SPI彩屏时序
这就是前面说的spi从机是有可接受范围的
看手册 这款彩屏的控制芯片叫ST7735S
大概看一下会看到有串行2线iic控制和3线spi控制 并行的8080控制和6800控制
我们直接看4线spi控制的内容 就能看到他的相关介绍
4 TFT彩屏控制
3.1 要初始化-看手册
3.2 要和贪吃蛇一样要有光标定位功能 SetCursor(x,y)
3.3 要有打印函数能写入点 点的颜色能指定 printw(color)
后通过某种组合or算法 使代码达到更快的运行效率
结语
然而这些都不用你们来做 厂家已经给出驱动库了
如果你们写linux驱动就是把这些函数和linux某些驱动框架进行融合就可以 如果是单片机裸机把底层接口对上就行
一篇SPI博客说的结语
(感谢这个博主这个ppt也是很大一部分借鉴他的)
底层建筑搭得好不好往往决定了上层建筑的好坏。之前已经实现在屏幕上画点,但是这仅仅是小小的实验而已,实际使用时我们通常用TFT来显示一些文字和图片,显示文字和图片就涉及到一些算法了,这一部分的好坏往往取决于设计者的软件水平,而作为嵌入式设计这也是最核心的部分,和硬件相关的部分仅仅是为上层建筑搭建根基,但是有根基还是不能够住人的,底层设计的好坏才是决定这个设计的总体价值。而一个优秀的嵌入式工程师总能够将整个系统的差异局部化和最小化,以提高系统的移植性去适应不同的底层建筑。当然市面上越来越多的嵌入式系统都将器件的差异集中到一部分,还有各种解决方案的推出为嵌入式开发者提供了更大的便利。