0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32H5开发(6)----SPI驱动TFT-LCD屏

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2023-12-01 16:45 次阅读

概述

嵌入式领域,TFT-LCD屏是最常用的显示解决方案之一,因为它们提供了丰富的颜色和高分辨率的图像显示能力。STM32H5作为ST的高性能微控制器系列,具备了强大的处理能力和多种通信接口,非常适合于驱动TFT-LCD显示屏,该液晶屏st7796或者ILI9488驱动芯片,这两个屏幕都是兼容的。
最近在弄ST的课程,需要样片的可以加群申请:615061293 。

样品申请

[https://www.wjx.top/vm/PpC1kRR.aspx]

视频教学

[https://www.bilibili.com/video/BV1JN411s7ni/](

源码下载

[https://download.csdn.net/download/qq_24312945/88477148]

屏幕接口

屏幕接口如下所示,此分辨率的屏幕提供了320个水平像素和480个垂直像素,使其成为中小型应用的理想选择。
在这里插入图片描述
在这里插入图片描述

接线方式

在这里插入图片描述

STM32CUBEMX配置

主频配置

屏幕数据由spi驱动,所以主频需要快点。
在这里插入图片描述

SPI配置

主要使用SPI的sck和mosi管脚进行时钟和数据的输出。
在这里插入图片描述

将IO口速率修改为最快。
在这里插入图片描述

IO配置

添加RES、DC、CS、BLK管脚。,管脚速率也修改为最快。

在这里插入图片描述

配置ICACHE

在STM32U5系列微控制器中,ICACHE是指指令缓存(Instruction Cache)。ICACHE是一个硬件缓存单元,用于提高处理器执行指令的效率。具体来说,当处理器需要执行指令时,它首先检查指令是否已经在ICACHE中缓存。如果指令已经在ICACHE中缓存,则处理器可以直接从ICACHE中读取指令,从而避免了从闪存或其他存储器中读取指令的时间延迟。
通过使用ICACHE,STM32U5系列微控制器可以显著提高处理器执行指令的速度,从而提高系统的整体性能。在使用ICACHE时,需要特别注意缓存的一致性,以确保指令的正确性和系统的稳定性。
在这里插入图片描述

lcd_init.c

这个文件主要是提供TFT LCD显示屏(基于ILI9488驱动芯片)与STM32H5系列微控制器之间的交互功能。
void LCD_Writ_Bus(uint8_t dat): 此函数用于将8位数据通过SPI发送到LCD。先前使用的是位操作来手动发送数据,但现在改用HAL库函数HAL_SPI_Transmit来处理。
左边为所提供的代码,右边为修改为HAL_SPI_Transmit发送。
在这里插入图片描述

lcd.c

这段代码主要是为液晶屏(LCD)提供图形和文字显示的功能。
有如下的功能。
LCD_Fill 函数:
用于在指定的区域内填充特定的颜色。
LCD_DrawPoint 函数:
在液晶屏的指定位置画一个点,并给这个点赋予指定的颜色。
LCD_DrawLine 函数:
画一条从起始坐标到终止坐标的直线,并给这条线赋予指定的颜色。
LCD_DrawRectangle 函数:
画一个矩形框,用户可以指定框的起始坐标、终止坐标和颜色。
Draw_Circle 函数:
画一个圆,用户可以指定圆心坐标、半径和颜色。
LCD_ShowChinese 函数:
用于在液晶屏上显示汉字串。根据给定的字号,这个函数会选择对应大小的汉字字库来显示汉字。
LCD_ShowChinese12x12、LCD_ShowChinese16x16、LCD_ShowChinese24x24 函数:
这三个函数是为不同大小的汉字(如12x12、16x16、24x24)提供的显示功能。每个函数都会查找对应的字库来为特定大小的汉字进行显示。
LCD_ShowChinese32x32:此函数用于显示一个32x32的汉字。它首先查找与输入匹配的汉字,然后显示该汉字。您可以选择叠加或非叠加模式来显示。
LCD_ShowChar:此函数用于显示一个字符。它根据输入字符的尺寸(如12x6、16x8等)调用相应的字符数组,并在LCD上显示该字符。同样,您可以选择叠加或非叠加模式来显示。
LCD_ShowString:此函数用于显示一个字符串。它调用LCD_ShowChar函数逐字符地显示整个字符串。
mypow:这是一个简单的数学函数,用于计算m的n次方。
LCD_ShowIntNum:此函数用于显示一个整数。它会将整数分解成单独的数字,并使用LCD_ShowChar函数逐一显示。
LCD_ShowFloatNum1:此函数用于显示一个浮点数(具有两位小数)。它首先将浮点数转换为整数,然后按上述方式显示该整数,同时在适当的位置插入小数点。
LCD_ShowPicture:此函数用于显示一张图片。它接受一个图片数组作为输入,该数组包含图片的RGB值,并将图片数据写入LCD。

设置区域颜色

设置区域颜色可以使用LCD_Fill函数,设置全屏颜色如下所示。

/* USER CODE BEGIN 2 */
	LCD_Init();//LCD初始化
	LCD_Fill(0,0,320,480,RED)	;	
	LCD_Fill(0,0,320,480,WHITE)	;	
  /* USER CODE END 2 */

显示字符串

调用LCD_ShowChar函数逐字符地显示整个字符串。

/* USER CODE BEGIN 2 */
	LCD_Init();//LCD初始化
	
	LCD_Fill(0,0,320,480,RED)	;	
	LCD_Fill(0,0,320,480,WHITE)	;	
	LCD_ShowString(0,0,"STM32H5",BLACK,RED,24,0);
	LCD_ShowString(32,32,"HELLO!",BLACK,WHITE,24,0);
	
  /* USER CODE END 2 */

显示汉字

LCD_ShowChinese 函数用于在液晶屏上显示汉字串。根据给定的字号,这个函数会选择对应大小的汉字字库来显示汉字
使用取模软件进行汉字字模生成,设置如下所示。
在这里插入图片描述

输入需要取模的汉字,这里设置大小为32*32.
在这里插入图片描述

将字模复制到例程lcdfont.h文件夹 如下数组内
注:每个字的字模前需要添加这个汉字,并用双引号括起来然后加上逗号!
在这里插入图片描述

驱动代码如下所示。

/* USER CODE BEGIN 2 */
	LCD_Init();//LCD初始化
		
	LCD_Fill(0,0,320,480,RED)	;	
	LCD_Fill(0,0,320,480,WHITE)	;	
	LCD_ShowString(0,0,"STM32H5",BLACK,RED,24,0);
	LCD_ShowString(32,32,"HELLO!",BLACK,WHITE,24,0);
    LCD_ShowChinese32x32(0,64,"记",RED,GREEN,32,0);
    LCD_ShowChinese32x32(32,64,"帖",RED,GREEN,32,0);
		HAL_Delay(500);

  /* USER CODE END 2 */

显示图片

LCD_ShowPicture此函数用于显示一张图片。它接受一个图片数组作为输入,该数组包含图片的RGB值,并将图片数据写入LCD。
打开Img2Lcd软件,设置如下所示,需要注意的是24位真彩色。
在这里插入图片描述
24位真彩色配置如下所示。
在这里插入图片描述

配置好分辨率之后点击一下小箭头,最下方会出现输出的实际比例。
在这里插入图片描述

然后点击保存,然后将生成的数组复制到到例程pic.h文件内。
在这里插入图片描述

驱动代码如下所示。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		LCD_ShowPicture(0,0,120,180,gImage_2);	
		HAL_Delay(500);		
		LCD_Fill(0,0,120,180,WHITE)	;			
		LCD_ShowPicture(40,60,120,180,gImage_2);	
		HAL_Delay(500);			
		LCD_Fill(40,60,160,240,WHITE)	;				
		LCD_ShowPicture(80,120,120,180,gImage_2);	
		HAL_Delay(500);			
		LCD_Fill(80,120,200,300,WHITE)	;				
		LCD_ShowPicture(120,180,120,180,gImage_2);		
		HAL_Delay(500);			
		LCD_Fill(120,180,240,360,WHITE)	;		
		LCD_ShowPicture(160,240,120,180,gImage_2);	
		HAL_Delay(500);			
		LCD_Fill(160,240,280,420,WHITE)	;		
		LCD_ShowPicture(200,300,120,180,gImage_2);	
		HAL_Delay(500);
		LCD_Fill(200,300,320,480,WHITE)	;	




    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

结果演示

在这里插入图片描述

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348743
  • TFT-LCD
    +关注

    关注

    12

    文章

    148

    浏览量

    31438
  • stm32cubemx
    +关注

    关注

    5

    文章

    260

    浏览量

    14447
收藏 人收藏

    评论

    相关推荐

    瑞萨e2studio(26)----SPI驱动TFT-LCD

    在嵌入式领域,TFT-LCD屏是最常用的显示解决方案之一,因为它们提供了丰富的颜色和高分辨率的图像显示能力。RA4M2作为瑞萨的微控制器系列,具备了强大的处理能力和多种通信接口,非常适合于驱动TFT-LCD显示屏,该液晶屏st7
    的头像 发表于 12-01 16:35 364次阅读
    瑞萨e2studio(26)----<b class='flag-5'>SPI</b><b class='flag-5'>驱动</b><b class='flag-5'>TFT-LCD</b>屏

    如何使用STM32CubeMX配置STM32F767IGT6 的 LTDC外设驱动TFT-LCD

    驱动 TFT-LCD (RGB)屏幕。1. 准备工作硬件准备开发板:首先需要准备一个开发板,这里我准备的是STM32F767IGT6的核心板
    发表于 08-10 06:02

    如何使用TFT-LCD显示

    蓝桥杯嵌入式开发板上有一个2.4寸TFT-LCD显示,在比赛中是必须要使用的模块,关于它的驱动程序,官方已经提供了,我们只要学会如何使用就行了。在
    发表于 10-27 07:53

    使用STM32CubeMX配置STM32F767IGT6的硬件FMC外设驱动TFT-LCD屏幕

    本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的硬件FMC外设驱动TFT-LCD屏幕。1. 准备工作硬件准备开发
    发表于 11-04 07:08

    基于打点函数的TFT-LCD屏幕程序

    显存(液晶控制器显存)中某一个点的颜色值。针对SPI驱动TFT-LCD屏幕:/** * @brief带颜色画点函数 * @paramx,y—— 画点坐标 * @return...
    发表于 12-21 06:45

    如何使用STM32CubeMX驱动16bit TFT-LCD屏幕

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD
    发表于 02-09 06:05

    TFT-LCD驱动IC设计

    TFT-LCD驱动IC设计 Introduction to Liquid-Crystal Display
    发表于 10-16 13:22 103次下载
    <b class='flag-5'>TFT-LCD</b><b class='flag-5'>驱动</b>IC设计

    小尺寸TFT-LCD驱动电路的设计

    摘要:根据TFTLCD的工作原理和显示驱动电路的结构,应用便伯设计出小尺寸TFT-LCD驱动电路,实现图像的清晰显示。介绍了硬件电路设计
    发表于 05-10 09:36 135次下载

    什么是TFT-LCD

      TFT-LCD 简介 什么是 TFT-LCD ? TFT ﹕薄膜晶体管 LCD﹕液晶显示器
    发表于 10-25 17:27 6550次阅读
    什么是<b class='flag-5'>TFT-LCD</b>

    LTPS/TFT-LCD,LTPS/TFT-LCD是什么意思

    LTPS/TFT-LCD,LTPS/TFT-LCD是什么意思 LTPS    TFT LCD可分为多晶硅(Poly-Si
    发表于 03-27 11:45 1.8w次阅读

    TFT-LCD平面显示器概论

    TFT-LCD of Application TFT-LCD TV Plasma TV compare What is TFT-LCD? TFT(thin film Transisto
    发表于 04-19 12:09 65次下载

    STM32CubeMX | 32-使用硬件FMC驱动TFT-LCD屏幕(MCU屏)

    本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的硬件FMC外设驱动TFT-LCD屏幕。1. 准备工作硬件准备开发
    发表于 10-29 09:36 29次下载
    <b class='flag-5'>STM32</b>CubeMX | 32-使用硬件FMC<b class='flag-5'>驱动</b><b class='flag-5'>TFT-LCD</b>屏幕(MCU屏)

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

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD
    发表于 11-21 17:21 62次下载
    <b class='flag-5'>STM32</b>单片机基础17——使用硬件<b class='flag-5'>SPI</b><b class='flag-5'>驱动</b><b class='flag-5'>TFT-LCD</b>(ST7789)

    STM32Cube_17】使用硬件SPI驱动TFT-LCD(ST7789)

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与ST7789通信,驱动16bit TFT-LCD
    发表于 12-05 19:36 92次下载
    【<b class='flag-5'>STM32</b>Cube_17】使用硬件<b class='flag-5'>SPI</b><b class='flag-5'>驱动</b><b class='flag-5'>TFT-LCD</b>(ST7789)

    STM32CubeIDE TFT-LCD显示

    随言:TFT-LCD的8080并口时序可以与ST的FSMC总线上操作SRAM的时序类似。故把TFT-LCD挂在SRAM上就能想操作SRAM一样操作TFT-LCD显示了。硬件:STM32
    发表于 01-17 12:01 23次下载
    <b class='flag-5'>STM32</b>CubeIDE <b class='flag-5'>TFT-LCD</b>显示