学习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_MOSI | PC3 |
| SPI2_CLK | PB13 |
| LCD_WR_RS | PC6 |
| LCD_RESET | PC7 |
| LCD_POWER | PB15 |
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 */
}
然后编译整个工程:
最后进行下载设置:


最后点击下载即可:

实验现象如下:

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

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

被折叠的 条评论
为什么被折叠?



