本帖最后由 傅沈骁 于 2025-3-1 12:21 编辑
感谢@yuyy1989 分享的文章 https://bbs.21ic.com/icview-3429636-1-1.html,向我们介绍了分别使用自定义驱动和使用官方库函数驱动STM32L562E-DK的屏幕。
这里介绍如何使用官方BSP库中的相关驱动和API完成屏幕显示。
在STM32CubeMX中以开发板新建工程,并默认初始化所有引脚。
板载LCD屏幕采用FMC接口,屏幕大小1.54英寸,240*240像素
对应原理图结构如下
ST7789H2时序逻辑如下
根据时序要求,在STM32CubeMX中设置FMC的NOR/PSRAM如下
设置完成后生成代码,根据官方库函数中的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
Src文件夹中需要加入font12.c,font16.c,font20.c,font24.c,font8.c,st7789h2_reg.c,st7789h2.c,stm32_lcd.c,stm32l562e_discovery_lcd.c
在stm32_lcd.c和stm32_lcd.h文件中,官方已经为我们封装好了多种用于屏幕显示的API。因此只需在主函数中调用相关API即可实现DIY屏幕显示。
在main.c中首先导入相关头文件#include "stm32l562e_discovery_lcd.h"
#include "stm32_lcd.h"
在主函数中绘制相关画面
LCD_UTILS_Drv_t lcdDrv;
/* Initialize the LCD */
BSP_LCD_Init(0, LCD_ORIENTATION_PORTRAIT);
/* Set UTIL_LCD functions */
lcdDrv.DrawBitmap = BSP_LCD_DrawBitmap;
lcdDrv.FillRGBRect = BSP_LCD_FillRGBRect;
lcdDrv.DrawHLine = BSP_LCD_DrawHLine;
lcdDrv.DrawVLine = BSP_LCD_DrawVLine;
lcdDrv.FillRect = BSP_LCD_FillRect;
lcdDrv.GetPixel = BSP_LCD_ReadPixel;
lcdDrv.SetPixel = BSP_LCD_WritePixel;
lcdDrv.GetXSize = BSP_LCD_GetXSize;
lcdDrv.GetYSize = BSP_LCD_GetYSize;
lcdDrv.SetLayer = BSP_LCD_SetActiveLayer;
lcdDrv.GetFormat = BSP_LCD_GetFormat;
UTIL_LCD_SetFuncDriver(&lcdDrv);
/* Clear the LCD */
UTIL_LCD_Clear(UTIL_LCD_COLOR_WHITE);
BSP_LCD_DisplayOn(0);
UTIL_LCD_SetTextColor(UTIL_LCD_COLOR_BLUE);
UTIL_LCD_SetBackColor(UTIL_LCD_COLOR_WHITE);
UTIL_LCD_SetFont(&Font24);
UTIL_LCD_DisplayStringAt(0, 80, (uint8_t *)"STM32L562E-DK", CENTER_MODE);
UTIL_LCD_DisplayStringAt(0, 120, (uint8_t *)"LCD Test", CENTER_MODE);
UTIL_LCD_DisplayStringAt(0, 160, (uint8_t *)"FuShenxiao", CENTER_MODE);
UTIL_LCD_DrawRect(5, 5, 230, 230, UTIL_LCD_COLOR_BLACK);
UTIL_LCD_FillRect(30, 20, 40, 40, UTIL_LCD_COLOR_RED);
UTIL_LCD_FillCircle(190, 40, 20, UTIL_LCD_COLOR_GREEN);
UTIL_LCD_FillEllipse(120, 40, 40, 20, UTIL_LCD_COLOR_DARKMAGENTA);
得到最终显示结果如下图所示
|