小熊派使SPI驱动TFT-LCD(ST7789)显示试验
学习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)显示试验相关推荐
- 小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD
文章目录 小熊派 FreeRTOS+SPI+DMA 驱动 TFT-LCD 一.文章前言 二.SPI+DMA 配置 三.FreeRTOS 配置 四.代码编写 五.实验现象 小熊派 FreeRTOS+SP ...
- 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)
简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...
- 华大HC32F460 SPI 驱动 ST7735S LCD显示器
华大HC32F460 SPI 驱动 ST7735S LCD显示器 前言: STM32改HC32F460 换芯片后发现SPI硬件驱动不了屏了,这个小问题搞了很久,最后用逻辑分析仪,分析时序,然后解决了, ...
- 嵌入式开发-STM32硬件SPI驱动TFT屏
嵌入式开发-STM32硬件SPI驱动TFT屏 这次用到的TFT屏 CubeMX设置 代码编写 增加的内容 需要注意问题 代码下载 这次用到的TFT屏 现在的TFT屏幕已经很便宜了,65536色屏幕,2 ...
- ESP8266+MicroPython开发:ESP8266使用硬件SPI驱动TFT屏幕(ST7735)
由于上次模拟SPI驱动TFT屏幕太慢,所以,本次采用硬件SPI来进行驱动,但是,当我直接把对应SPI接口更换时,发现TFT屏幕驱动并没有因此得到好转,依然是非常的满,然后只能从对应花点铺色,显示字符串 ...
- 初试树莓派在2.2寸QVGA SPI TFT LCD上显示图片
春节前整理抽屉翻出来一块2.2寸的240x320 SPI的TFT LCD.想起来这是当初做完Arduino搭配176x220的实验(http://blog.csdn.net/ki1381/articl ...
- DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V
DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V 前言 IMG2LCD软件生成RGB565格式图片 使用取模软件对图片取模 实验结果 ...
- STM32单片机基础17——使用硬件SPI驱动TFT-LCD(ST7789)
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD 屏幕. 0. 前言 学习 SPI 外设驱动LCD屏幕没有 ...
- stm32 驱动 TFT LCD
LCD/LCM的基本概念 液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状 ...
- 织女星开发板RISC-V核通过SPI协议驱动ARDUINO LCD模块(显示)
前言 第一次写这个博客,算是新手吧,刚好有这个机会,手边有VEGA的开发板和Arduino的LCD模块,做了点小东西,想和大家分享一下. 一开始只是想着通过SPI协议初始化LCD屏幕,然后发个字符串就 ...
最新文章
- 从电商用户触点看服务设计趋势
- 网站架构演变和知识体系
- 从底层重学 Java 之 Stream 并行及标志 GitChat连接
- springboot security 权限不足_SpringBoot 整合 SpringSecurity 之起源篇(零)
- UIView的一些基本方法 init、loadView、viewDidLoad、viewDidUnload、dealloc
- 登量子位“AI领航企业榜单”,联想用实力说话
- oracle的clob赋值_oracle 临时clob 和永久clob 的读取操作详解
- 鸿蒙系统可以上外网吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- html种颜色的三种不同表示方法,html网页背景颜色的代码是什么?颜色有几种表示方法?...
- 电力能耗监测在山东青岛机场的应用
- 深度自定义macOS邮件程序的个性签名内容
- C库函数——fabs()
- N-Tiers开发方式(如何使用VB.NET撰写COM+组件)
- R语言画图,根据正负值画不同颜色,并且画水平线或者垂直线
- 幂平均不等式,幂平均不等式加权形式
- Nvidia Jetson Agx Xavier 在Ros中调用GMSL2相机
- php-fpm安装,启动,重启
- 苹果cms模板_9ccms与苹果cms介绍.推荐小白用9ccms程序
- 小米 ios消息推送服务器吗,iOS15推送之后,小米MIUI13新消息来了
- 学习笔记20220513
热门文章
- 数据挖掘实验:使用 Hadoop 实现 WordCount 应用
- 爬虫——Python爬英文文献ScienceDirect论文的标题、摘要,并保存在本地
- jQuery插件库链接
- mysql keepalived配置文件详解_Keepalived配置文件详解
- 【C语言】(用函数实现)任意给定两个正整数a和n,计算a+aa+aaa+aa...(n个a)的和。(例如输入1,3即为计算1+11+111的值)。
- Flexbox 基础知识
- warframe星际战甲氏族颜料35种全获取机制和获取流程攻略
- java异或什么意思_阿里二面准备(Java 研发),精心准备200题(含答案)收割 offer...
- android——java.lang.IllegalStateException: Fatal Exception thrown on Scheduler
- 星际争霸2人工智能研究环境SC2LE完全入门指南