小熊派使SPI驱动TFT-LCD(ST7789)显示试验

本文详细介绍如何使用STM32的SPI接口驱动ST7789V2控制器的LCD屏,包括硬件准备、MDK工程生成、驱动编写及用户代码实现。

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

1. 准备工作

硬件准备

  • 开发板
    首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):
  • LCD屏幕
    小熊派开发板板载LCD屏幕大小1.3寸分辨率240*240色彩深度16bit,使用ST7789V2液晶控制器。

2.生成MDK工程

选择芯片型号

打开STM32CubeMX,打开MCU选择器:

 搜索并选中芯片STM32L431RCT6:

配置时钟源

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

这里我都使用外部时钟:

配置LCD控制GPIO

配置SPI2接口

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

LCD引脚MCU引脚
SPI2_MOSIPC3
SPI2_CLKPB13
LCD_WR_RSPC6
LCD_RESETPC7
LCD_POWERPB15

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

参数设置如下:

SPI2默认SCK引脚是PB10,和开发板不对应,所以重新修改引脚为PB13:
在这里插入图片描述

配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:
在这里插入图片描述

生成工程设置

在这里插入图片描述

代码生成设置

最后设置生成独立的初始化文件:
在这里插入图片描述

生成代码

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

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

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

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

3.2. 封装LCD发送数据和发送命令函数

数据都是由 SPI2 的MOSI发送,由 LCD_WR_RS 引脚指明该数据是命令还是数据。

首先在 spi.c 的最后调用HAL库封装一个函数,供驱动程序调用:

/* USER CODE BEGIN 1 */
uint8_t SPI2_WriteByte(uint8_t *TxData, uint16_t size)
{
    return HAL_SPI_Transmit(&hspi2, TxData, size, 1000);
}
/* USER CODE END 1 */

不要忘了在spi.h中声明该函数!

3.3. 将lcd显示驱动函数添加到工程中

在项目文件夹中新建一个hardware文件夹,将LCD-SPI文件夹放在hardware文件夹中。

不要忘了要包含头文件

4. 在MDK中编写、编译、下载用户代码

在main.c中的main函数中编写简单的用户代码:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI2_Init();
  /* USER CODE BEGIN 2 */
  LCD_Init();
  LCD_DisplayOn();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  LCD_ShowCharStr(0, 0, 240, "guoguoxiaoshidi",0x0000,0xFFFF,24);//显示字符串,字体大小32*32
  }
  /* USER CODE END 3 */
}

然后编译整个工程:
 最后进行下载设置:
   最后点击下载即可:

实验现象如下:


工程源码在公众号后台回复:小熊派,即可!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果果小师弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值