[STM32L5] 【STM32L562E-DK试用】使用官方库驱动LCD屏幕

[复制链接]
691|0
 楼主| 傅沈骁 发表于 2025-3-1 12:21 | 显示全部楼层 |阅读模式
本帖最后由 傅沈骁 于 2025-3-1 12:21 编辑

感谢@yuyy1989 分享的文章 https://bbs.21ic.com/icview-3429636-1-1.html,向我们介绍了分别使用自定义驱动和使用官方库函数驱动STM32L562E-DK的屏幕。
这里介绍如何使用官方BSP库中的相关驱动和API完成屏幕显示。
在STM32CubeMX中以开发板新建工程,并默认初始化所有引脚。
6095267c27cd0f2062.png

板载LCD屏幕采用FMC接口,屏幕大小1.54英寸,240*240像素
4503067c27e8dc3744.png

对应原理图结构如下
8369367c27facbf894.png

ST7789H2时序逻辑如下
3113767c2817857156.png

根据时序要求,在STM32CubeMX中设置FMC的NOR/PSRAM如下
7876367c27dbd976c7.png

设置完成后生成代码,根据官方库函数中的BSP文件夹导入下列相关文件
其中Inc文件夹中需要加入fonts.h,lcd.h,st7789h2_reg.h,st7789h2.h,stm32_lcd.h,stm32l562e_discovery_conf.h,stm32l562e_discovery_errno.h,stm32l562e_discovery_lcd.h
3097667c284b14aa2d.png

Src文件夹中需要加入font12.c,font16.c,font20.c,font24.c,font8.c,st7789h2_reg.c,st7789h2.c,stm32_lcd.c,stm32l562e_discovery_lcd.c
6299067c2855bc65a2.png

在stm32_lcd.c和stm32_lcd.h文件中,官方已经为我们封装好了多种用于屏幕显示的API。因此只需在主函数中调用相关API即可实现DIY屏幕显示。
在main.c中首先导入相关头文件
  1. #include "stm32l562e_discovery_lcd.h"
  2. #include "stm32_lcd.h"

在主函数中绘制相关画面
  1.   LCD_UTILS_Drv_t lcdDrv;
  2.   /* Initialize the LCD */
  3.   BSP_LCD_Init(0, LCD_ORIENTATION_PORTRAIT);
  4.   /* Set UTIL_LCD functions */
  5.   lcdDrv.DrawBitmap  = BSP_LCD_DrawBitmap;
  6.   lcdDrv.FillRGBRect = BSP_LCD_FillRGBRect;
  7.   lcdDrv.DrawHLine   = BSP_LCD_DrawHLine;
  8.   lcdDrv.DrawVLine   = BSP_LCD_DrawVLine;
  9.   lcdDrv.FillRect    = BSP_LCD_FillRect;
  10.   lcdDrv.GetPixel    = BSP_LCD_ReadPixel;
  11.   lcdDrv.SetPixel    = BSP_LCD_WritePixel;
  12.   lcdDrv.GetXSize    = BSP_LCD_GetXSize;
  13.   lcdDrv.GetYSize    = BSP_LCD_GetYSize;
  14.   lcdDrv.SetLayer    = BSP_LCD_SetActiveLayer;
  15.   lcdDrv.GetFormat   = BSP_LCD_GetFormat;
  16.   UTIL_LCD_SetFuncDriver(&lcdDrv);
  17.   /* Clear the LCD */
  18.   UTIL_LCD_Clear(UTIL_LCD_COLOR_WHITE);
  19.   BSP_LCD_DisplayOn(0);
  20.   UTIL_LCD_SetTextColor(UTIL_LCD_COLOR_BLUE);
  21.   UTIL_LCD_SetBackColor(UTIL_LCD_COLOR_WHITE);
  22.   UTIL_LCD_SetFont(&Font24);
  23.   UTIL_LCD_DisplayStringAt(0, 80, (uint8_t *)"STM32L562E-DK", CENTER_MODE);
  24.   UTIL_LCD_DisplayStringAt(0, 120, (uint8_t *)"LCD Test", CENTER_MODE);
  25.   UTIL_LCD_DisplayStringAt(0, 160, (uint8_t *)"FuShenxiao", CENTER_MODE);
  26.   UTIL_LCD_DrawRect(5, 5, 230, 230, UTIL_LCD_COLOR_BLACK);
  27.   UTIL_LCD_FillRect(30, 20, 40, 40, UTIL_LCD_COLOR_RED);
  28.   UTIL_LCD_FillCircle(190, 40, 20, UTIL_LCD_COLOR_GREEN);
  29.   UTIL_LCD_FillEllipse(120, 40, 40, 20, UTIL_LCD_COLOR_DARKMAGENTA);

得到最终显示结果如下图所示
3937867c28904e541a.jpg



您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部