开发板自带了一块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);
- }
显示效果:
|