开发板自带了一块240*240分辨率的触摸屏:
本次基于官方demo进行修改,从而在屏幕上显示相应的文字。首先进行系统和时钟的初始化:
HAL_StatusTypeDef HAL_Init(void)
{
HAL_StatusTypeDef status = HAL_OK;
/* Set Interrupt Group Priority */
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_3);
/* Insure time base clock coherency */
SystemCoreClockUpdate();
/* Use SysTick as time base source and configure 1ms tick (default clock after Reset is MSI) */
if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
{
status = HAL_ERROR;
}
else
{
/* Init the low level hardware */
HAL_MspInit();
}
/* Return function status */
return status;
}
然后进行相关HMI设备和LED等的初始化:
static void SystemHardwareInit(void)
{
/* Init LEDs */
if (LedInitialized != SET)
{
if (BSP_LED_Init(LED9) != BSP_ERROR_NONE)
{
Error_Handler();
}
if (BSP_LED_Init(LED10) != BSP_ERROR_NONE)
{
Error_Handler();
}
LedInitialized = SET;
}
/* Init User push-button in EXTI Mode */
if (ButtonInitialized != SET)
{
if (BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI) != BSP_ERROR_NONE)
{
Error_Handler();
}
ButtonInitialized = SET;
}
/* Initialize the LCD */
if (LcdInitialized != SET)
{
LCD_UTILS_Drv_t lcdDrv;
/* Initialize the LCD */
if (BSP_LCD_Init(0, LCD_ORIENTATION_PORTRAIT) != BSP_ERROR_NONE)
{
Error_Handler();
}
/* 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);
/* Set the display on */
if (BSP_LCD_DisplayOn(0) != BSP_ERROR_NONE)
{
Error_Handler();
}
LcdInitialized = SET;
}
/* Initialize the TouchScreen */
if (TsInitialized != SET)
{
TS_Init_t TsInit;
/* Initialize the TouchScreen */
TsInit.Width = 240;
TsInit.Height = 240;
TsInit.Orientation = TS_ORIENTATION_PORTRAIT;
TsInit.Accuracy = 10;
if (BSP_TS_Init(0, &TsInit) != BSP_ERROR_NONE)
{
Error_Handler();
}
/* Configure TS interrupt */
if (BSP_TS_EnableIT(0) != BSP_ERROR_NONE)
{
Error_Handler();
}
TsInitialized = SET;
}
}
调用屏幕API进行显示:
static void Display_DemoDescription(void)
{
char desc[60];
/* Set font */
UTIL_LCD_SetFont(&Font20);
/* Clear the LCD */
UTIL_LCD_Clear(UTIL_LCD_COLOR_WHITE);
/* Set the LCD Text Color */
UTIL_LCD_SetTextColor(UTIL_LCD_COLOR_DARKBLUE);
UTIL_LCD_SetBackColor(UTIL_LCD_COLOR_WHITE);
/* Display LCD messages */
UTIL_LCD_DisplayStringAt(0, 10, (uint8_t *)"STM32L562E-DK BSP", CENTER_MODE);
UTIL_LCD_DisplayStringAt(0, 35, (uint8_t *)"drivers example", CENTER_MODE);
/* Draw Bitmap */
UTIL_LCD_DrawBitmap(80, 65, (uint8_t *)st**);
UTIL_LCD_SetFont(&Font8);
UTIL_LCD_DisplayStringAt(0, 220, (uint8_t *)"Copyright (c) STMicroelectronics 2019", CENTER_MODE);
UTIL_LCD_SetFont(&Font12);
UTIL_LCD_FillRect(0, 145, 240, 50, UTIL_LCD_COLOR_BLUE);
UTIL_LCD_SetTextColor(UTIL_LCD_COLOR_WHITE);
UTIL_LCD_SetBackColor(UTIL_LCD_COLOR_BLUE);
UTIL_LCD_DisplayStringAt(0, 135, (uint8_t *)"Hello 21IC", CENTER_MODE);
UTIL_LCD_DisplayStringAt(0, 150, (uint8_t *)"Press User push-button", CENTER_MODE);
UTIL_LCD_DisplayStringAt(0, 165, (uint8_t *)"to start :", CENTER_MODE);
sprintf(desc,"%s example", BSP_examples[DemoIndex].DemoName);
UTIL_LCD_DisplayStringAt(0, 180, (uint8_t *)desc, CENTER_MODE);
}
显示效果:
|