软硬件平台
- GD32F307E-START Board开发板
- GCC Makefile
- 1.8寸TFTLCD 分辨率128*160 驱动IC ST7735S
接口定义
ST7735的LCD模块有128x128, 128x160等不同分辨率, 对外的接线除了VCC和GND外有6根, 接线方式都是一样的
- SCL SPI时钟, 对应上位机SPI的SCK
- SDA SPI数据输入, 对应上位机SPI的MOSI
- RES 重启, 低电平有效, 工作时处于高电平
- DC 命令模式和数据模式切换位, 低电平为命令模式, 高电平为数据模式
- CS 片选信号, 对应上位机SPI的CS
- BL 背光, 高电平亮, 低电平灭
如果使用软件SPI, IO口可以随便选择, 如果是硬件SPI, 其中的CS, SCK, MOSI 和 MISO(ST7735未使用)只能使用特定的IO口。
SPI通信协议简介
CSX为从机片选,仅当CSX为低电平时,芯片才会被使能。D/CX为芯片的数据/命令控制引脚,当DCX为低电平时写命令,为高电平时写数据。SCL为SPI总线时钟,每个上升沿传输1bit数据;SDA为SPI传输的数据,一次传输8bit数据,数据格式如下图所示:
高位在前,先传输
对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL=0,为低电平。CPOL对传输协议没有很多的影响;
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHL=0,在第一个跳变沿进行数据采集;
模拟SPI移植LCD屏幕
- 工程模板建立
在之前的gcc makefile的工程模板上进行添加文件,同时lcd部分代码参考梁山派GD32F4开发板资料进行。
lcd_drive.c lcd_drive.h // lcd底层驱动文件,包括软件spi实现,lcd引脚配置,lcd初始化
lcd_draw.c lcd_draw.h // lcd应用层文件,主要是绘图api实现(可以移植到其他开发板,不需要改,仅配置好驱动文件即可)
- 配置引脚
选择引脚,进入工程开始编写屏幕引脚初始化代码。
为了方便后续移植,我在oled_driver.h处宏定义了每一个引脚,后续根据需要进行修改即可。
- 引脚gpio初始化 (重点1)
- 端口宏定义设置
- 软件SPI代码实现
如果传输的数据位为1,则将SPI数据引脚拉高;传输的数据位为0,则将SPI数据引脚拉低。每次传输一个字节数据,高位在前,每个时钟上升沿传输1位数据。
- LCD初始化函数
- 驱动完整代码见仓库代码
测试
- 主函数
- 效果
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/73994.html