打印
[STM32L5]

【STM32L562 DK试用】LCD图形代码学习(三)

[复制链接]
65|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 地瓜patch 于 2025-3-1 17:22 编辑

#申请原创#@21小跑堂

在STM32L562 DK的测试中,对LCD编辑图形,显示字符等功能比较感兴趣。阅读分析了一下库文件中的函数。[size=16.002px]在STM32L562 Discovery Kit中,LCD相关的函数通常通过HAL库或LL库来实现。
[size=16.002px]对LCD相关函数的分析,主要涉及初始化、配置、显示控制等方面。

1. LCD初始化


与LCD的接口是使用FMC,在图纸中如下

在ST cubeMX中定义如下

  PD5   ------> FMC_NWE
  PD4   ------> FMC_NOE
  PD1   ------> FMC_DA3
  PD1   ------> FMC_D3
  PD0   ------> FMC_DA2
  PD0   ------> FMC_D2
  PF0   ------> FMC_A0
  PD7   ------> FMC_NE1
  PD14   ------> FMC_DA0
  PD14   ------> FMC_D0
  PD15   ------> FMC_DA1
  PD15   ------> FMC_D1
  PE8   ------> FMC_DA5
  PE8   ------> FMC_D5
  PE10   ------> FMC_DA7
  PE10   ------> FMC_D7
  PE12   ------> FMC_DA9
  PE12   ------> FMC_D9
  PD9   ------> FMC_DA14
  PD9   ------> FMC_D14
  PE7   ------> FMC_DA4
  PE7   ------> FMC_D4

在程序中定义如下
/* NE1 : LCD */
  gpio_init_structure.Pin = GPIO_PIN_7;
  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
  /*## NOE and NWE configuration #######*/
  gpio_init_structure.Pin = GPIO_PIN_4 | GPIO_PIN_5;
  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
  /*## RS configuration #######*/
  gpio_init_structure.Pin = GPIO_PIN_0;
  HAL_GPIO_Init(GPIOF, &gpio_init_structure);
  /*## Data Bus #######*/
  gpio_init_structure.Pull      = GPIO_NOPULL;
  /* GPIOD configuration */
  gpio_init_structure.Pin = GPIO_PIN_0  | GPIO_PIN_1  | GPIO_PIN_8 | GPIO_PIN_9 | \GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
  /* GPIOE configuration */
  gpio_init_structure.Pin = GPIO_PIN_7  | GPIO_PIN_8  | GPIO_PIN_9  | GPIO_PIN_10 | \ GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | \ GPIO_PIN_15;
  HAL_GPIO_Init(GPIOE, &gpio_init_structure);

2. LCD几何绘图相关函数
以下是LDC驱动程序的定义及声明,它为LCD显示提供了基本的驱动函数。
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;


在stm32l562e_discovery.c文件中定义了LCD几何图形的绘图函数,函数的作用

int32_t  BSP_LCD_SetBrightness(uint32_t Instance, uint32_t Brightness);
设置显示亮度,等级从0-100
int32_t  BSP_LCD_GetBrightness(uint32_t Instance, uint32_t *Brightness);
获取LCD亮度等级
int32_t  BSP_LCD_GetXSize(uint32_t Instance, uint32_t *Xsize);
获取X轴像素大小
int32_t  BSP_LCD_GetYSize(uint32_t Instance, uint32_t *Ysize);
获取Y轴像素大小
int32_t  BSP_LCD_DrawBitmap(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint8_t *pBmp);
绘制位图,起始点坐标,图片每个像素数值
int32_t  BSP_LCD_FillRGBRect(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint8_t *pData, uint32_t Width, uint32_t Height);
填充矩形区域,起始点坐标,每个点的颜色参数,填充宽度和高度
int32_t  BSP_LCD_DrawHLine(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint32_t Length, uint32_t Color);
绘制水平线,起始点坐标,长度,颜色
int32_t  BSP_LCD_DrawVLine(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint32_t Length, uint32_t Color);
绘制垂直线,起始点坐标,长度,颜色
int32_t  BSP_LCD_FillRect(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint32_t Width, uint32_t Height, uint32_t Color);
填充矩形区域,起始点坐标,填充宽度和高度,颜色,这个智能单色填充
int32_t  BSP_LCD_ReadPixel(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint32_t *Color);
读取目标像素点的颜色
int32_t  BSP_LCD_WritePixel(uint32_t Instance, uint32_t Xpos, uint32_t Ypos, uint32_t Color);
将颜色值写入对应像素点
int32_t  BSP_LCD_GetFormat(uint32_t Instance, uint32_t *Format);

获取LCD支持的像素格式




3.随意画几个图形




IMG_20250301_170326.jpg (312.3 KB )

IMG_20250301_170326.jpg

IMG_20250301_170909.jpg (327.74 KB )

IMG_20250301_170909.jpg

IMG_20250301_171209.jpg (324.08 KB )

IMG_20250301_171209.jpg

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1365

主题

13463

帖子

27

粉丝