学习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 */
}

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

实验现象如下:


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

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

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

    文章目录 小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD 一.文章前言 二.SPI+DMA 配置 三.FreeRTOS 配置 四.代码编写 五.实验现象 小熊派 FreeRTOS+SP ...

  2. 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...

  3. 华大HC32F460 SPI 驱动 ST7735S LCD显示器

    华大HC32F460 SPI 驱动 ST7735S LCD显示器 前言: STM32改HC32F460 换芯片后发现SPI硬件驱动不了屏了,这个小问题搞了很久,最后用逻辑分析仪,分析时序,然后解决了, ...

  4. 嵌入式开发-STM32硬件SPI驱动TFT屏

    嵌入式开发-STM32硬件SPI驱动TFT屏 这次用到的TFT屏 CubeMX设置 代码编写 增加的内容 需要注意问题 代码下载 这次用到的TFT屏 现在的TFT屏幕已经很便宜了,65536色屏幕,2 ...

  5. ESP8266+MicroPython开发:ESP8266使用硬件SPI驱动TFT屏幕(ST7735)

    由于上次模拟SPI驱动TFT屏幕太慢,所以,本次采用硬件SPI来进行驱动,但是,当我直接把对应SPI接口更换时,发现TFT屏幕驱动并没有因此得到好转,依然是非常的满,然后只能从对应花点铺色,显示字符串 ...

  6. 初试树莓派在2.2寸QVGA SPI TFT LCD上显示图片

    春节前整理抽屉翻出来一块2.2寸的240x320 SPI的TFT LCD.想起来这是当初做完Arduino搭配176x220的实验(http://blog.csdn.net/ki1381/articl ...

  7. DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V

    DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V 前言 IMG2LCD软件生成RGB565格式图片 使用取模软件对图片取模 实验结果 ...

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

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD 屏幕. 0. 前言 学习 SPI 外设驱动LCD屏幕没有 ...

  9. stm32 驱动 TFT LCD

    LCD/LCM的基本概念 液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状 ...

  10. 织女星开发板RISC-V核通过SPI协议驱动ARDUINO LCD模块(显示)

    前言 第一次写这个博客,算是新手吧,刚好有这个机会,手边有VEGA的开发板和Arduino的LCD模块,做了点小东西,想和大家分享一下. 一开始只是想着通过SPI协议初始化LCD屏幕,然后发个字符串就 ...

最新文章

  1. 从电商用户触点看服务设计趋势
  2. 网站架构演变和知识体系
  3. 从底层重学 Java 之 Stream 并行及标志 GitChat连接
  4. springboot security 权限不足_SpringBoot 整合 SpringSecurity 之起源篇(零)
  5. UIView的一些基本方法 init、loadView、viewDidLoad、viewDidUnload、dealloc
  6. 登量子位“AI领航企业榜单”,联想用实力说话
  7. oracle的clob赋值_oracle 临时clob 和永久clob 的读取操作详解
  8. 鸿蒙系统可以上外网吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  9. html种颜色的三种不同表示方法,html网页背景颜色的代码是什么?颜色有几种表示方法?...
  10. 电力能耗监测在山东青岛机场的应用
  11. 深度自定义macOS邮件程序的个性签名内容
  12. C库函数——fabs()
  13. N-Tiers开发方式(如何使用VB.NET撰写COM+组件)
  14. R语言画图,根据正负值画不同颜色,并且画水平线或者垂直线
  15. 幂平均不等式,幂平均不等式加权形式
  16. Nvidia Jetson Agx Xavier 在Ros中调用GMSL2相机
  17. php-fpm安装,启动,重启
  18. 苹果cms模板_9ccms与苹果cms介绍.推荐小白用9ccms程序
  19. 小米 ios消息推送服务器吗,iOS15推送之后,小米MIUI13新消息来了
  20. 学习笔记20220513

热门文章

  1. 数据挖掘实验:使用 Hadoop 实现 WordCount 应用
  2. 爬虫——Python爬英文文献ScienceDirect论文的标题、摘要,并保存在本地
  3. jQuery插件库链接
  4. mysql keepalived配置文件详解_Keepalived配置文件详解
  5. 【C语言】(用函数实现)任意给定两个正整数a和n,计算a+aa+aaa+aa...(n个a)的和。(例如输入1,3即为计算1+11+111的值)。
  6. Flexbox 基础知识
  7. warframe星际战甲氏族颜料35种全获取机制和获取流程攻略
  8. java异或什么意思_阿里二面准备(Java 研发),精心准备200题(含答案)收割 offer...
  9. android——java.lang.IllegalStateException: Fatal Exception thrown on Scheduler
  10. 星际争霸2人工智能研究环境SC2LE完全入门指南