STM32单片机基础17——使用硬件SPI驱动TFT-LCD(ST7789)

stm32驱动st7789 TFT-LCD屏幕显示 stm32驱动tft-lcd显示图片、文字、字符串 阅读详情

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD 屏幕。

0. 前言

学习 SPI 外设驱动LCD屏幕没有必要手写驱动,学习这部分代码的目的是为了了解TFT-LCD的工作原理,每个像素点是如何显示的,不要花过多的精力在弄明白每个命令的意思,建议基于本驱动,学习一下打点,画线算法,画圆算法,画多边形算法等等,还可以学习显示英文字符,中文字符,最后还可以移植STemwin显示界面等等好玩的东西~

mark

mark

mark

1. 准备工作

硬件准备

mark

  • LCD屏幕
    小熊派开发板板载LCD屏幕大小1.3寸,分辨率240*240,色彩深度16bit,使用ST7789V2液晶控制器

软件准备

  • 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码;

Keil MDK和串口助手的安装包都可以关注“小熊派开源社区”微信公众号,在资料教程一栏中可获取安装包。

2.生成MDK工程

选择芯片型号

打开STM32CubeMX,打开MCU选择器:
mark

搜索并选中芯片STM32L431RCT6:
mark

配置时钟源

  • 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
  • 如果使用默认内部时钟(HSI),这一步可以略过;

这里我都使用外部时钟:

mark

配置LCD控制GPIO

mark

配置SPI2接口

查看小熊派LCD接口的原理图:

mark

mark

引脚对应表如下:

LCD引脚 MCU引脚
SPI2_MOSI PC3
SPI2_CLK PB13
LCD_WR_RS PC6
LCD_RESET PC7
LCD_POWER PB15

MCU只需要通过SPI向LCD控制器发送命令/数据即可,所以硬件上接 SPI2 的 SCK 和 MOSI 引脚,软件上将SPI2配置为发送主机模式,接下来开始配置SPI2接口:

参数设置如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DUX2uXV4-1581661413301)(http://mculover666.cn/image/20190829/1DHh2ytSwgcp.png?imageslim)]

SPI2默认SCK引脚是PB10,和开发板不对应,所以重新修改引脚为PB13:

mark

配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:
mark

生成工程设置

mark

代码生成设置

最后设置生成独立的初始化文件:
mark

生成代码

点击GENERATE CODE即可生成MDK-V5工程:
mark

3. 编写LCD驱动(ST7789)—— 封装宏和底层函数

3.1. 封装控制LCD控制引脚高低电平的宏

控制引脚宏定义已经包含在 main.h 中,如图:

mark

在编写驱动的过程中需要不断的控制这些控制引脚的电平,所以首先在 lcd_spi2_drv.h 头文件中编写控制这些引脚的宏:

#include "main.h"

#define	LCD_PWR(n)		(n?\
						HAL_GPIO_WritePin(LCD_PWR_GPIO_Port,LCD_PWR_Pin,GPIO_PIN_SET):\
						HAL_GPIO_WritePin(LCD_PWR_GPIO_Port,LCD_PWR_Pin,GPIO_PIN_RESET))
#define	LCD_WR_RS(n)	(n?\
						HAL_GPIO_WritePin(LCD_WR_RS_GPIO_Port,LCD_WR_RS_Pin,GPIO_PIN_SET):\
						HAL_GPIO_WritePin(LCD_WR_RS_GPIO_Port,LCD_WR_RS_Pin,GPIO_PIN_RESET))
#define	LCD_RST(n)		(n?\
						HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin,GPIO_PIN_SET):\
						HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin,GPIO_PIN_RESET))

3.2. 宏定义屏幕分辨率和颜色值

//LCD屏幕分辨率定义
#define LCD_Width   240
#define LCD_Height  240
//颜色定义
#define WHITE   0xFFFF	//白色
#define YELLOW  0xFFE0	//黄色
#define BRRED   0XFC07  //棕红色
#define PINK    0XF81F	//粉色
#define RED     0xF800	//红色
#define BROWN   0XBC40  //棕色
#define GRAY    0X8430  //灰色
#define GBLUE   0X07FF	//兰色
#define GREEN   0x07E0	//绿色
#define BLUE    0x001F  //蓝色
#define BLACK   0x0000	//黑色

接下来开始在 lcd_spi2_drv.c 编写驱动程序~

3.3. 封装LCD控制引脚初始化函数

首先包含必要的头文件:

#include "lcd_spi2_drv.h"
#include "gpio.h"
#
基于stm32物联网开发板(2)--LCD屏幕 屏幕尺寸为1.3寸,分辨率240*240,颜色格式RGB565,驱动IC:ST7789VW;超大可视角度:大于160°(显示屏中可视角度最大的一种屏幕);宽电压供电(3V~5V),兼容3.3V和5V电平逻辑,无需电平转换芯片;采用7线制SPI接口;工作温度范围为工业级(-20℃~60℃);军工级工艺标准,长期稳定工作; 阅读详情

相关推荐

基础实现STM32控制ST7789显示屏

手把手教你从零开始用STM32控制ST7789显示屏,无需经验也能轻松上手。深入解析初始化流程与关键代码逻辑,让ST7789显示不再神秘,适合嵌入式入门者实践操作。

weixin_32102617的博客 1206

【ZYNQ】ST7789 介绍与驱动

ST7789 是 Sitronix 公司推出的小型 TFT-LCD 屏幕驱动 IC,包括 ST7789V, ST7789S 等系列,支持 262K 色彩显示。本文主要介绍 ST7789 3-line/4-line serial 接口,以及使用 Zynq 实现ST7789 驱动

洋洋Young的博客 4132

STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

屏幕厂家提供的都是标准库,网上找了找没看到好用的HAL库屏幕驱动,因此本文对HAL库驱动TFT屏幕进行详细讲解。

weixin_44597885的博客 6019

硬件SPI+DMA驱动ST7789芯片(超详细讲解)(合宙AIR001)

前段时间用软件SPI的方式驱动ST7789芯片的显示屏,主控的主频本来就不高,加上软件SPI刷全屏就特别呆,大概2s才能刷一次全屏,帧率只有0.5帧左右,于是就打算改用硬件SPI+DMA的方式,在配置和移植过程中就遇到不少问题,想把过程分享给大家,希望对大家有所帮助。

abc565846881的博客 1万+

TFT驱动ST7789使用总结

TFT驱动ST7789使用总结

qq_28576837的博客 5万+

GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)

市面采用`GC9A01`驱动IC的屏幕不多,基本上为1.28寸圆形屏,机缘巧合有接触过的这款驱动IC中两款屏幕,其中一款为并行8080接口驱动的触摸屏,目前有编写stm32f10x相关的代码,但市面上使用者似乎较少,因此本文以另一款屏幕为主。

优信电子的博客 2万+

单片机笔记】分享关于STM32 SPI驱动ST7789 LCD ISP TFT液晶屏幕

偶然的一次机会得到了一块1.3寸的彩色液晶,控制器为ST7789V,支持SPI。对应的其他大小的有2.0的和2.4的,spi用起来还是比较简单的,硬件接口线少方便,刷屏速度还是可以的。这里因为只有1.3的屏(240*240分辨率),所以只测试了1.3的,其他的因为控制器是一样的,所以基本都差不多,无非分辨率不一样。 TFT.C文件 #include "fy_tft.h" #define T...

冯宇的博客 1万+

小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD

小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD

嵌入式学习记录站点 1万+

STM32单片机初学6-SPI通信驱动IPS彩屏

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线。 和IIC一样,是单片机开发中最常用的外设之一。对比IIC,其特点表现在: 1.通信速率快,以STM32F103C8T6为例,其SPI速率可达18Mbps,即2.25MB/s,而IIC高速模式也才3.4Mbps; 2.全双工通信,SPI有两根数据线,一根主出从入,一根主入从出,在同一时刻既可以发送数据,也可以接受数据,而IIC是半双工,发送、接受数

qq_55203246的博客 2万+

STM32驱动ST7789系列(一):基础

初级利用STM32完成ST7789屏幕的简单显示

m0_58669183的博客 5142

STM32:OLED和TFT LCD屏幕对比,及LCD屏幕注意事项】

预算有限的消费电子(如中低端手机、平板)、工业控制屏、户外显示屏、长时间静态显示设备。按照上述步骤连接硬件并移植驱动代码,即可快速实现屏幕显示功能。高端手机、VR设备、需要高对比度的显示器、柔性屏应用。

ZHY0091的博客 4779

STM32CubeMX + HAL 库:用FSMC接口驱动TFT LCD屏幕显示

本实验通过STM32的FSMC接口驱动2.8寸TFTLCD屏幕(ILI9341驱动芯片),实现了屏幕初始化、清屏和 标准 ASCII 字符集显示功能。实验详细介绍了TFTLCD的工作原理、FSMC配置方法以及与OLED的对比特性,重点阐述了FSMC在驱动LCD时的特殊应用——使用地址线区分命令/数据寄存器而非直接寻址。实验代码实现了字符显示、字符串输出等功能,验证了驱动程序的正确性。通过本实验掌握FSMC接口驱动TFTLCD屏幕基础,为后续开发图形界面应用奠定基础

weixin_71894495的博客 1775

让你学会写ST7789驱动LCD程序(SPI

让你学会写ST7789驱动LCD程序(SPI),如果你想直接使用代码,可以拉到最下面有完整的头文件代码,可以直接移植使用(注意修改spi的引脚即可)

abc565846881的博客 8128

STM32ST7789屏幕驱动

使用STM32F411CEU6单片机驱动ST7789屏幕,SPI通信,基于HAL库

勤学以惜时 7047

ST7789系列简介

ST7789 系列提供了多种型号,满足从基础到高端、从低成本到高性能的各种显示需求。选择具体型号时,应根据应用场景的具体需求和设计要求,参考各个型号的详细规格和功能。如需更详细的技术规格和应用指南,建议查阅 Sitronix 官方网站或产品供应商提供的详细数据手册。这些资料可以帮助您更全面地了解各个型号之间的差异和具体特性,从而选择最合适的型号。

嵌入式开发工程师, 教育品类产品开发 7033

基于STM32ST7789屏幕驱动

在这篇文章中,我们将示范如何使用 STM32 微控制器驱动ST7789 显示器。我们会逐步介绍如何初始化 GPIO 和 SPI 接口,发送命令和数据,并完成显示器的基本操作,如清屏和窗口设置。提示:以下是本篇文章正文内容,下面案例可供参考通过上述步骤,我们实现了 STM32ST7789 显示屏的初始化与基本控制。掌握这些基本操作后,可以进一步实现更复杂的图形显示功能,如绘制图像、文字显示等。在实际开发中,还需要根据具体应用调整显示参数和优化代码性能。

TLY983074808的博客 6027

ST7789V2 LCD驱动芯片

ST7789V2是一个单芯片TFT-LCD驱动器。该芯片可以直接连接到外部MCU,支持并行8080系列的8位/9位/16位/18位接口,也支持SPI串行通讯接口。 显示数据可以存储在240x320x18bits的片上显示数据RAM中。 它可以在没有外部操作时钟的情况下执行显示数据RAM读写操作,以尽量减少功耗。 并行接口占用外部MCU芯片引脚较多,但其通讯速率较快,一般只在需要高速刷新及MCU资源比较丰富的场合使用SPI串行通讯接口占用MCU芯片引脚较少,通讯速率相对并行接口较慢,但因其占用MCU引脚.

weixin_43885532的博客 2万+
上一篇: STM32单片机基础16——使用硬件CRC校验数据(以SHT30为例)
下一篇: STM32单片机基础18——使用硬件QSPI读写SPI Flash(W25Q64)
小熊派开源社区
博客等级 码龄7年 527粉丝 55原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值