ST AN3128 Application note

AN3128
Application note
STM32 embedded graphic objects/touchscreen library
Introduction
This library is a firmware package which contains a collection of routines, data structures, and macros covering the main features of a graphic library and supporting a HID device to interact with the graphic objects (touchscreen, joystick, and pushbutton).
While the firmware library functions with all currently available STM32 microcontrollers, (STM32F10xxx, STM32L1xx and STM32F2xx series), this document describes the firmware library through the implementation of a graphic library for embedded systems based on the STM32F10xxx microcontroller family.
It can easily be used in the user application without an in-depth study of STM32 registers, SPI, and I significant time that would otherwise be spent in coding, while at the same time reducing the application development and integration costs.
The firmware architecture is developed in separate layers and the HAL (hardware abstraction layer) makes it independent from the microcontroller used in the final application.
A set of fonts is included: 8x12 and 16x24.
Even though the firmware library source code is developed in 'ANSI-C', the code architecture follows an OOP (object oriented programming) approach.
Section 1 describes the document and library rules.
Section 2 highlights the features of the STMPE811 and explains its hardware interface with
a device microcontroller (STM32 in this case).
Section 3 and 4 describe the library features, its architecture and its exported APIs
(application programming interfaces) in detail.
Section 5 contains an example application source code describing how to configure and use
the library.
Section 6 contains information about the embedded GUI resource editor application.
2
C read/write operation steps. As a result, using the firmware library saves
June 2011 Doc ID 16918 Rev 5 1/105
www.st.com
Contents AN3128
Contents
1 Document and library rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1 Acronyms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Touchscreen controller hardware description . . . . . . . . . . . . . . . . . . . 11
2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 STMPE811 functional overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Touchscreen controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Interfacing touchscreen with microcontroller with the STMPE811 via I2C 13
3 Multi-input embedded GUI library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Graphic object introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Library package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 Library architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4.1 API layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4.2 HAL layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Multi-input embedded GUI library firmware . . . . . . . . . . . . . . . . . . . . . 21
4.1 Graphic object API functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.1 NewLabel API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.2 NewButton API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.1.3 NewCheckbox API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.4 NewSwitch API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.5 NewIcon API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.6 NewRadioButtonGrp API global function . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.7 AddRadioOption API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.8 NewComboBoxGrp API global function . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1.9 AddComboOption API global function . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.10 NewSlidebar API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.11 NewHistogram API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.12 NewGraphChart API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.13 AddPageControlObj API global function . . . . . . . . . . . . . . . . . . . . . . . . 36
2/105 Doc ID 16918 Rev 5
AN3128 Contents
4.1.14 DestroyPageControl API global function . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.15 DestroyPage API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.16 Set_Label API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.17 Get_Label API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.18 GetComboOptionLabel API global function . . . . . . . . . . . . . . . . . . . . . . 40
4.1.19 SetComboOptionLabel API global function . . . . . . . . . . . . . . . . . . . . . . 41
4.1.20 ResetComboOptionActive API global function . . . . . . . . . . . . . . . . . . . . 42
4.1.21 GetComboOptionActive API global function . . . . . . . . . . . . . . . . . . . . . 43
4.1.22 SetIconImage API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.1.23 Get_SlidebarValue API global function . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.24 SetHistogramPoints API global function . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.25 SetGraphChartPoints API global function . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.26 GetObjStatus API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.27 ShowPage API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1.28 RefreshPage API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.29 RefreshPageControl API global function . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1.30 ChangePage API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1.31 Set_LCD_Resolution API global function . . . . . . . . . . . . . . . . . . . . . . . 52
4.1.32 Set_LastFlashMemoryAddress API global function . . . . . . . . . . . . . . . . 52
4.1.33 CursorInit API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1.34 CursorShow API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2 Graphic objects API types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.2.1 GL_ErrStatus type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.2 GL_Direction type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.3 GL_ButtonStatus type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.4 GL_ObjType type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.5 GL_Coordinate_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.6 GL_PageControls_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.7 GL_Label_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.8 GL_Button_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.9 GL_CheckboxObj_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.10 GL_SwitchObj_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.11 GL_RadioButtonGrp_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.12 GL_RadioButton_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.13 GL_ComboBoxGrp_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.14 GL_ComboOption_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.15 GL_Icon_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Doc ID 16918 Rev 5 3/105
Contents AN3128
4.2.16 GL_Slidebar_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.17 GL_Histogram_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.18 GL_GraphChart_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.19 GL_ObjDimensions_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.20 GL_Page_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.21 GL_BusType type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.22 LCD_HW_Parameters_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.23 TSC_HW_Parameters_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2.24 JOY_HW_Parameters_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2.25 JOY_ReadMode type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2.26 BTN_HW_Parameters_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3 Graphic object API properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.1 Graphics controls:: properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.2 Graphic Object:: PagesList array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.3 LCD:: pLcdParam API properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.4 Touchscreen:: pTscParam API properties . . . . . . . . . . . . . . . . . . . . . . . 67
4.3.5 Joystick:: pJoyParam API properties . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.3.6 Push user button:: pBtnParam API properties . . . . . . . . . . . . . . . . . . . . 70
4.4 HAL layer firmware overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5 HAL types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.1 GL_bool type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.2 GL_FlagStatus/GL_ITStatus type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.3 GL_SignalActionType type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.4 GL_FunctionalState type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.5 TSC_I2C_SettingsType type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.6 TSC_Flash_TestStatus type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.5.7 GL_LCD_TypeDef type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6 HAL functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6.1 NewLcdHwParamObj HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6.2 GL_SetTextColor HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6.3 GL_SetBackColor HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.6.4 GL_Clear HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.6.5 GL_LCD_DrawCharTransparent HAL function . . . . . . . . . . . . . . . . . . . 74
4.6.6 GL_LCD_DrawChar HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.6.7 GL_DisplayAdjStringLine HAL function . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.6.8 GL_LCD_DisplayChar HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.6.9 GL_SetDisplayWindow HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.6.10 GL_DrawLine HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4/105 Doc ID 16918 Rev 5
AN3128 Contents
4.6.11 GL_DrawBMP HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.6.12 GL_SetFont HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.6.13 GL_BackLightSwitch HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.6.14 GL_BUSConfig HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.6.15 GL_LCD_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.6.16 NewTscHwParamObj HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.6.17 NewJoyHwParamObj HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.6.18 NewBtnHwParamObj HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.6.19 GL_GPIO_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.6.20 GL_SPI_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.6.21 GL_NVIC_SetVectorTable HAL function . . . . . . . . . . . . . . . . . . . . . . . . 81
4.6.22 GL_NVIC_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.6.23 GL_NVIC_PriorityGroupConfig HAL function . . . . . . . . . . . . . . . . . . . . 82
4.6.24 GL_EXTI_DeInit HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.6.25 GL_EXTI_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.6.26 GL_GPIO_EXTILineConfig HAL function . . . . . . . . . . . . . . . . . . . . . . . 83
4.6.27 GL_EXTI_TSC_IRQHandler HAL function . . . . . . . . . . . . . . . . . . . . . . 84
4.6.28 GL_TSC_Interface_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.6.29 GL_JOY_Interface_Init HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.6.30 GL_JoyStickConfig_IOExpander HAL function . . . . . . . . . . . . . . . . . . . 85
4.6.31 GL_JoyStickConfig_GPIO HAL function . . . . . . . . . . . . . . . . . . . . . . . . 85
4.6.32 GL_JoyStickStateIOEXP HAL function . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.6.33 GL_JoyStickStatePolling HAL function . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.6.34 GL_Delay HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.6.35 TSC_Read HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.6.36 TSC_FLASH_Unlock HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.6.37 TSC_FLASH_ClearFlag HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.6.38 TSC_FLASH_ErasePage HAL function . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.6.39 TSC_FLASH_ProgramWord HAL function . . . . . . . . . . . . . . . . . . . . . . 89
4.6.40 GL_GPIO_ReadInputDataBit HAL function . . . . . . . . . . . . . . . . . . . . . . 90
4.6.41 GL_LCD_CtrlLinesWrite HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.6.42 GL_LCD_ReadRAM HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.6.43 GL_RCC_APBPeriphClockCmd HAL function . . . . . . . . . . . . . . . . . . . . 91
4.6.44 GL_RCC_AHBPeriphClockCmd HAL function . . . . . . . . . . . . . . . . . . . 92
5 Getting started with the system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.1 Example application - main.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Doc ID 16918 Rev 5 5/105
Contents AN3128
6 Embedded GUI resource editor application . . . . . . . . . . . . . . . . . . . . . 97
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.2 Resource editor application: quick start . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.3 Description of the generated files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.4 Integration with the embedded project . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8 Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6/105 Doc ID 16918 Rev 5
AN3128 List of tables
List of tables
Table 1. List of acronyms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Table 2. ROM usage of graphic objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Table 3. RAM usage of graphic objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Table 4. ROM usage of font sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Table 5. Function description format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Table 6. NewLabel API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Table 7. NewButton API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Table 8. NewCheckbox API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Table 9. NewSwitch API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Table 10. NewIcon API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Table 11. NewRadioButtonGrp API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Table 12. AddRadioOption API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Table 13. NewComboBoxGrp API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Table 14. AddComboOption API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Table 15. NewSlidebar API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Table 16. NewHistogram API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Table 17. NewGraphChart API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Table 18. AddPageControlObj API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Table 19. DestroyPageControl API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Table 20. DestroyPage API function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Table 21. Set_Label API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Table 22. Get_Label API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Table 23. GetComboOptionLabel API function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Table 24. SetComboOptionLabel API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Table 25. ResetComboOptionActive API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Table 26. GetComboOptionActive API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Table 27. SetIconImage API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Table 28. Get_SlidebarValue API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Table 29. SetHistogramPoints API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Table 30. SetGraphChartPoints API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Table 31. GetObjStatus API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Table 32. ShowPage API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Table 33. RefreshPage API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Table 34. RefreshPage API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Table 35. ChangePage API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Table 36. Set_LCD_Resolution API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Table 37. Set_LastFlashMemoryAddress API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Table 38. CursorInit API global function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Table 39. CursorShow API function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Table 40. NewLcdHwParamObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Table 41. GL_SetTextColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Table 42. GL_SetBackColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Table 43. GL_Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Table 44. GL_LCD_DrawCharTransparent HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Table 45. GL_LCD_DrawChar HAL function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Table 46. GL_DisplayAdjStringLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Table 47. GL_LCD_DisplayChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Table 48. GL_SetDisplayWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Doc ID 16918 Rev 5 7/105
List of tables AN3128
Table 49. GL_DrawLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Table 50. GL_DrawBMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Table 51. GL_SetFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Table 52. GL_BackLightSwitch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Table 53. GL_BUSConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Table 54. GL_LCD_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Table 55. NewTscHwParamObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Table 56. NewJoyHwParamObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Table 57. NewBtnHwParamObj HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Table 58. GL_GPIO_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Table 59. GL_SPI_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Table 60. GL_NVIC_SetVectorTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Table 61. GL_NVIC_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Table 62. GL_NVIC_PriorityGroupConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Table 63. GL_EXTI_DeInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Table 64. GL_EXTI_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Table 65. GL_GPIO_EXTILineConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Table 66. GL_EXTI_TSC_IRQHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Table 67. GL_TSC_Interface_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Table 68. GL_JOY_Interface_Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Table 69. GL_JoyStickConfig_IOExpander . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Table 70. GL_JoyStickConfig_GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Table 71. GL_JoyStickStateIOEXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Table 72. GL_JoyStickConfig_GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Table 73. GL_Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Table 74. TSC_Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Table 75. TSC_FLASH_Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Table 76. TSC_FLASH_ClearFlag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Table 77. TSC_FLASH_ErasePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Table 78. TSC_FLASH_ProgramWord. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Table 79. GL_GPIO_ReadInputDataBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Table 80. GL_LCD_CtrlLinesWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Table 81. GL_LCD_ReadRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Table 82. GL_RCC_APBPeriphClockCmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Table 83. GL_RCC_AHBPeriphClockCmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Table 84. Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8/105 Doc ID 16918 Rev 5
AN3128 List of figures
List of figures
Figure 1. STMPE811 functional block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Figure 2. Touchscreen controller block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Figure 3. Two STMPE811s in IOExpander mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Figure 4. Firmware library project files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Figure 5. Firmware library architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Figure 6. Button graphical layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Figure 7. Checkbox graphical layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Figure 8. Switch graphical layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Figure 9. Radio button graphical layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Figure 10. Combobox graphical layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Figure 11. Slidebar graphical object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Figure 12. Histogram graphical object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Figure 13. GraphChart graphical object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Figure 14. Firmware library API types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Figure 15. Firmware library API functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Figure 16. Firmware library HAL types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Figure 17. Creating a GUI application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Figure 18. Creating a new GUI project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Figure 19. Choosing the project file location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Figure 20. Set the screen resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Figure 21. Set the screen name. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Figure 22. Screen workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Figure 23. Screen properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Figure 24. Creating a new screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Figure 25. Screens list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Figure 26. Building the project source code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Figure 27. Set the include/source file paths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Doc ID 16918 Rev 5 9/105
Document and library rules AN3128

1 Document and library rules

This document uses the conventions described in the sections below.

1.1 Acronyms

The following table lists the acronyms used in this document.

Table 1. List of acronyms

Acronym Meaning
API Application programming interface
HAL Hardware abstraction layer
MCU Microcontroller unit
I2C Inter-integrated circuit
SPI Serial peripheral interface
OOP Object oriented programming
10/105 Doc ID 16918 Rev 5
AN3128 Touchscreen controller hardware description

2 Touchscreen controller hardware description

2.1 Description

In this section we describe an example device that could be used for the touchscreen management. This device is present on both STM3210C-EVAL and STM32100E-EVAL demonstration board. The STMPE811 is a GPIO (general purpose input/output) port expander able to interface a main digital ASIC via the two-line bi-directional bus (I separate GPIO expander is often used in mobile multimedia platforms to solve the problem regarding the limited amount of GPIOs typically available on the digital engine.
The STMPE811 offers great flexibility, as each I/O can be configured as input, output, or specific functions. The device has been designed with very low quiescent current and includes a wake-up feature for each I/O, to optimize the power consumption of the device.
A 4-wire touchscreen controller is built into the STMPE811. The touchscreen controller is enhanced with a movement tracking algorithm (to avoid excessive data), a 128 x 32-bit buffer and programmable active window feature.

2.2 Features

2
C). A
8 GPIOs
1.8 - 3.3 V operating voltage
Integrated 4-wire touchscreen controller
Interrupt output pin
Wake-up feature on each I/O
SPI and I
Up to 2 devices sharing the same bus in I
8-input 12-bit ADC
128-depth buffer touchscreen controller
Touchscreen movement detection algorithm
25 kV air-gap ESD protection (system level)
4 kV HBM ESD protection (device level).
2
C interface

2.3 STMPE811 functional overview

The STMP811 consists of the following blocks:
2
I
C and SPI interface
Analog-to-digital converter (ADC)
Touchscreen controller (TSC)
Driver and switch control unit
Temperature sensor
GPIO controller.
2
C mode (1 address line)
Doc ID 16918 Rev 5 11/105
Touchscreen controller hardware description AN3128
R

Figure 1. STMPE811 functional block diagram

).4
$ATAIN
!$ATAOUT
3#,+#,+
3$!4
#3
'.$ 

2.4 Touchscreen controller

The STMPE811 is integrated with a hard-wired touchscreen controller for a 4-wire resistive type touchscreen. The touchscreen controller is able to operate completely autonomously, and interrupts the connected CPU only when a pre-defined event occurs.
CONTROLLER
)#
INTERFACE
6## 
'0)/
30)
2#OSCILLATOR
3WITCHES
ANDDRIVERS
!$#  43#
4HERMAL
SENSE
43#4OUCHSCREENCONTROLLE 
62%&
'0)/
!$#). -/$%
2%&2%&
!-V

Figure 2. Touchscreen controller block diagram

Movement
and
window tracking
FIFO
FIFO
and
interrupt control
switch control
10/12 bit
ADC
Driver
and
Switch
and
drivers
s
AM08448v1
12/105 Doc ID 16918 Rev 5
AN3128 Touchscreen controller hardware description
Y-
1
INT
2
A0/Data
Out
3
4 5
VCC
6
Data in
7
IN0
8
IN1
9
GND
10
IN2
11
IN3
12
X+
13
Vio
14
Y+
15
X-
16
U7
STMPE81811
Y-
1
INT
2
A0/Data
Out
3
4 5
VCC
6
Data in
7
IN0
8
IN1
9
GND
10
IN2
11
IN3
12
X+
13
Vio
14
Y+
15
X-
16
U8
STMPE81811
R56 10K
+3V3
I2C
device
address:0x8 2
I2C
device
address:0x88
+3V3
+3V3
R57 100K
R58 100K
TouchScreen_X+
TouchScreen_X-
TouchScreen_Y+
TouchScreen_Y-
EXP_I_IO2 EXP_I_IO3 EXP_I_IO4 EXP_I_IO5 EXP_I_IO6 EXP_I_IO7 EXP_I_IO8
EXP_I_IO9 EXP_I_IO1O10 EXP_I_IO1O11 EXP_I_IO1O12
EXP_I_IO1
R160 10K
R159 0
+3V3
R37 10K
R164 10K
+3V3
C89 100nF
C90 100nF
PB6 PB7 P
B14
SCLK SDAT
SCLK SDAT

2.5 Interfacing touchscreen with microcontroller with the STMPE811 via I2C

The STMPE811 has a simple 2-wire I2C digital serial interface which allows the user to access the data in the touchscreen controller register at any time. It communicates via the serial interface with a master controller.
Figure 3 shows how the STM32F10xxx microcontroller (master device) must be connected
to the STMPE811 device.

Figure 3. Two STMPE811s in IOExpander mode

+3V
C8 100n
IO_Expander_SCK
IO_Expander_SDA
IO_Expander_INT
VC
14
Vio
10
GN SCLK
B1
R15
+3V
R3 10
+3V
SDAT
Data A0/Data
ST
devic
Out
address:0x8
16 15 13 12 11
TouchScreen_Y-
TouchScreen_X­TouchScreen_Y+ TouchScreen_X+
EXP EXP EXP EXP
R5 100
C9 100n
VC
14
Vio
10
GN SCLK SDAT
R160 10
+3V
For more information on the touchscreen controller, refer to the STMPE811, datasheet,
+3V
R164 10
Data A0/Data
Out
R5
ST
10
devic
address:0x8
16 15 13 12 11
R5 100
EXP EXP EXP EXP EXP EXP EXP EXP
where it is possible to find details about the registers concerning the data of the touched points on the touchscreen.
AM08449v1
Doc ID 16918 Rev 5 13/105
Multi-input embedded GUI library AN3128

3 Multi-input embedded GUI library

3.1 Introduction

The library supports touchscreen features and includes a low level driver which handles the analog input (for 12-bit ADC), and a function for the touchscreen calibration based on an algorithm using 5 points.
The multi-input embedded GUI firmware library is fully developed in 'ANSI-C' following an OOP approach. This means that the final application uses instances of page and graphic objects according to their public methods and properties. In the end the PageObj is a structure containing public properties (data fields) and methods (functions pointers). The OOP encapsulation feature is assured.
The library can be included in the final application as a library file (multi-input embedded GUI library.a) and used as a black box through its exported public API, or included in the final application as source files (.c and .h) if the user wants to debug the library itself, and/or change the HAL functions in order to port the library on an LCD different (in model and resolution).
The calibration process is part of the post-processing layer. The touchscreen must be calibrated at first power-on and/or upon user request.
Once the calibration is done, on future power-on of the board it does not have to be run again because the calibration parameters are saved on the Flash memory.

3.2 Graphic object introduction

This solution enables designers, comfortable with the use of standard microcontrollers, to create higher-end “look and feel” human interfaces by replacing conventional electromechanical switches with touch sensing controls.
Designers can combine touch sensing functions using multiple configurations (touchscreen, joystick, and keys) with traditional MCU features (communication, LED control, beeper, LCD control, etc.).
The multi-input embedded GUI library is part of the application firmware.
Maturity, robustness, flexibility, and performance, with good time-to-market, make this solution simple to implement to develop any kind of application.
The graphic objects are a set of controls that can be printed on the screen and associated to an action when pressed.
The library has been developed and tested on an LCD panel of QVGA resolution (320x240) which is the default, but the library is independent to the LCD resolution, although it has not been tested with others.
The library has been designed to have the minimum memory footprint possible.
The reserved Flash memory footprint requirement depends on the application configuration. It is therefore not possible to specify a precise value, but normally for a “typical” user application, 64 Kbytes of Flash memory are needed (the images are stored in ROM).
14/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library
It is the same as far as the RAM usage is concerned: the user can calculate the space required by the application considering the heap space required by each graphic object used in their own application. For a typical application, 32 KB of RAM are required.
Ta bl e 2 shows the ROM usage (Flash memory) of the bitmap images for each type of
graphic object using IAR 5.5 and high optimization for size:

Table 2. ROM usage of graphic objects

Graphic object type ROM (Flash) Note
Label 0 bytes Totally
Button 2.904 bytes Totally
Checkbox 1.736 bytes Totally
RadioButton 1.736 bytes Totally
ComboBox 4.144 bytes Totally
Switch 2.904 bytes Totally
Icon 0 bytes Totally
Slidebar 944 bytes Totally
Histogram 0 bytes Totally
Graph chart 0 bytes Totally
Ta bl e 3 shows the RAM usage of each type of graphic object:

Table 3. RAM usage of graphic objects

Graphic object type RAM (Heap) Note
Label 101 bytes Each
Button 70 bytes Each
Checkbox 79 bytes Each
RadioButtonGrp 40 bytes Each
RadioOption 48 bytes Each
ComboBoxGrp 90 bytes Each
ComboOption 29 bytes Each
Switch 86 bytes Each
Icon 53 bytes Each
Slidebar 79 bytes Each
Histogram 156 bytes Each
Graph chart 257 bytes Each
Page 162 bytes Each
Doc ID 16918 Rev 5 15/105
Multi-input embedded GUI library AN3128
Ta bl e 4 shows the ROM usage (Flash memory) of the font sets:

Table 4. ROM usage of font sets

Font set ROM (Flash) Note
Font 16x24 4.560 bytes Totally
Font 8x12 2.688 bytes Totally
All the graphic objects are allocated dynamically, in a typical application the heap size should be about 16 KB, and the stack should be about 2 KB.

3.3 Library package

The library was developed supporting Raisonance Ride Kit ARM, IAR the IAR EWARM, Atollic TrueSTUDIO, Keil MDK-ARM , TASKING VX-toolset for ARM Cortex-M3 and the related workspace/project files are included in the delivered package.
The “Libraries” folder contains all the subdirectories and files that make up the core of the library.
Embedded_GUI_HAL contains all files and subdirectories that makes the hardware abstraction layer (HAL). The developer has to modify only these files if he needs to port the library to other board with other TSC/LCD/JOYSTICK controller, and set the defined constant into the file “hw_config.h” contained under the folder “./Embedded_GUI_Example/inc”:
inc: sub-folder contains the HAL header files.
LcdHal.h: HAL layer file; contains all the LCD function prototypes whose
implementation depends on the LCD used. The final user should change this file in order to re-use this library with other LCDs.
JoyHal.h: HAL layer file; contains all the joystick function prototypes whose
implementation depends on the joystick controller used by the application. The user need only change these function implementations in order to re-use this code with other joystick controllers.
TscHal.h: HAL layer file; contains all the touchscreen function prototypes whose
implementation depends on the TSC controller used by the application. The user need only change these function implementations in order to re-use this code with other TSC controllers.
touchscreen.h: contains all the function prototypes for the touchscreen firmware
driver.
src: sub-folder contains the HAL source files.
LcdHal.c: HAL layer file; contains all the LCD function declarations whose
implementation depends on the LCD used and the MCU (STM32 for this delivery). The final user should change this file in order to re-use this library with other LCDs.
JoyHal.c: HAL layer file; contains all the joystick management function
declarations whose implementation depends on the joystick controller used by the application. The user only needs to change these functions implementations in order to re-use this code with other joystick controllers.
16/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library
TscHal.c: HAL layer file; contains all the touchscreen management function
declarations whose implementation depends on the TSC controller used by the application. The user only needs to change these functions implementations in order to re-use this code with other TSC controllers.
touchscreen.c: contains all the function declarations for the touchscreen firmware
driver.
Embedded_GUI_Library contains all files and subdirectories that makes the graphic objects core:
inc: sub-folder contains the firmware library header files
cursor.h: contains all the function prototypes and basic structure for the cursor
pointer (arrow header).
gl_fonts.h: contains all the LCD fonts size definition exported declarations.
GraphicObject.h: API layer file; contains all the function prototypes for the graphic
objects; the API functions are declared in this file.
GraphicObjectTypes.h: API layer file; contains all the defined types used by
GraphicObject.c file and related to the graphic objects structures; and the structure parameters for the LCD, touchscreen, joystick and push button.
images.h: contains all the Hex dumps of the various images used by the
application.
src: sub-folder contains the firmware library source files.
cursor.c: API layer file; contains the exported public API (application programming
interface) and the related private internal functions for the cursor pointer (arrow header). No direct reference to the hardware and micro firmware library occurs in this file.
gl_fonts.c: contains all the LCD font size definitions.
GraphicObject.c: API layer file; contains the entire exported public API (application
programming interface) and the related private internal functions for the graphic objects and touchscreen calibration; no direct reference to the hardware and microcontroller firmware library occurs in this file.
images.c: contains all the Hex dumps of the various images used by the library
application.
STM32F10x_StdPeriph_Driver, STM32L1xx_StdPeriph_Driver and STM32F2xx_StdPeriph_Driver sub-folders contain respectively the STM32F10xxxV3.5.0, STM32L1xxV1.0.0 and STM32F2xxV1.0.0 firmware library files. If the final user wants to use another microcontroller library version, he can replace the updated library folder and check the HAL types and the microcontroller library function calls inside the HAL layer files (TscHal.c, TscHal.h, JoyHal.h, JoyHal.c, LcdHal.c, LcdHal.h).
CMSIS sub-folder contains the STM32F10xxx, STM32L1xx and STM32F2xx CMSIS files: device peripheral access layer and core peripheral access layer.
The “Project” folder contains all the subdirectories and files that make up the library demonstration.
Embedded_GUI_Example sub-folder contains the STM32F10xxx Graphic library
demonstration:
inc: sub-folder contains the graphic library demonstration header files
src: sub-folder contains the graphic library demonstration header source files
EWARM sub-folder contains the IAR EWARM workspace and project files
RIDE sub-folder contains the Raisonance Ride workspace and project files
Doc ID 16918 Rev 5 17/105
Multi-input embedded GUI library AN3128
MDK-ARM sub-folder contains the Keil MDK-ARM workspace and project files
TrueSTUDIO sub-folder contains the Atollic TrueSTUDIO workspace and project
files
TASKING sub-folder contains the TASKING VX-toolset for ARM Cortex-M3
workspace and project files
Embedded_GUI_Template sub-folder contains the STM32 Graphic library template for
Resource Editor (PC Software) output files:
inc : sub-folder where to place generated header files from Resource Editor PC
software (uiappuser.h, uiframework.h, uiappuser.h).
src : sub-folder where to place generated source files from Resource Editor PC
software (uiframework.c, pictures.c, uiappuser.c).
EWARM sub-folder contains the IAR EWARM workspace and project files
RIDE sub-folder contains the Raisonance Ride workspace and project files
MDK-ARM sub-folder contains the Keil MDK-ARM workspace and project files
TrueSTUDIO sub-folder contains the Atollic TrueSTUDIO workspace and project files
TASKING sub-folder contains the TASKING VX-toolset for ARM Cortex-M3 workspace
and project files
The “Utilities” folder contains all the subdirectories and files that make up the STMicroelectronics demonstration board drivers.
STM32_EVAL sub-folder contains STM32 demonstration board drivers
PC_SOFTWARE sub-folder contains Resource Editor
The “_htmresc” folder contains all package html page resources.

Figure 4. Firmware library project files

18/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library

3.4 Library architecture

Library architecture is thought out and developed in two separate layers:
API layer
HAL layer
This layer architecture improves the code re-usability splitting the application programming interface code (fully portable and re-usable) from the hardware abstraction layer code (hardware dependent and written upon the LCD library).

Figure 5. Firmware library architecture

3.4.1 API layer

The application programming interface layer allows the final application to use the library as a black-box. The library firmware encapsulation feature and exported API allow a full control of the LCD and touchscreen without knowing, in-depth, LCD registers and SPI/I read/write operation steps for the LCD and touchscreen respectively.
The API layer includes the following files:
graphicObject.h
graphicObject.c
graphicObjectTypes
cursor.c
cursor.h
See Section 4.1 for a more detailed description.

3.4.2 HAL layer

The hardware abstraction layer is directly built into the specific LCD firmware library and allows the build-upon layers, like the API layer, to implement its functions without knowing, in-depth, the LCD, MCU and touchscreen controller used. This improves the library code re-
2
C
Doc ID 16918 Rev 5 19/105
Multi-input embedded GUI library AN3128
usability and guarantees an easy portability on other LCDs, MCUs and touchscreen controllers.
The HAL layer includes the following files:
LcdHal.h
LcdHal.c
TscHal.h
TscHal.c
JoyHal.h
JoyHal.c
Touchscreen.h
Touchscreen.c
See Section 4.4 for a more detailed description.
20/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library firmware

4 Multi-input embedded GUI library firmware

This section describes the API and HAL layer implementation. Each library firmware function is described in detail. An example of how to use API functions is provided. No example is provided for the HAL function, because the final application should manage the graphic objects through the API layer functions only, without any direct access to the HAL functions.
The functions are described in the following format:

Table 5. Function description format

Name Description
Function name The name of the function
Function prototype Prototype declaration of the function
Behavior description Brief explanation of how the function is executed
Input parameter {x} Description of the input parameters
Output parameter {x} Description of the output parameters
Return value Value returned by the function
Required preconditions Requirements before calling the function
Called functions Other library functions called

4.1 Graphic object API functions

The application programming interface layer allows the final application to create pages of graphic objects and easy use of the STMPE811 touchscreen controller. An OOP approach is used, so it's possible for the application developer to create and use one or more instances of a graphic object and work with pages of object without writing the code to display the graphic objects every time the application changes the focus on another page.
Graphic object structures are seen by the application as objects with encapsulated properties and methods. In the end, they are advanced structures containing:
Properties as data fields
Methods as function pointers
In this way each API function belongs to the related graphic object instance and so, many graphic objects can be managed without any conflicts.
Every type of graphic object has a pre-event function that provides the process to change its visualization on the screen and the internal status of the object; for example in a ComboBox, when the user hits the “Down Arrow” the pre-event function changes the image associated showing the one associated to Image2_PTR for a few moments, and sets the next option in the list as active. This function is predefined for each type of object and very useful in order to minimize the developer workload. In this way, the developer need only place graphic objects on the screen page and write a function event that is called after the pre-event function, when a touch/click event occurs between the object coordinates area.
Doc ID 16918 Rev 5 21/105
Multi-input embedded GUI library firmware AN3128
The library exports the following public API global functions in order to create the graphic objects type structure instance and set/get the relative properties:
NewLabel function
NewButton function
NewSwitch function
NewCheckbox function
NewIcon function
NewRadioButtonGrp function
AddRadioOption function
NewSlidebar function
NewHistogram function
NewGraphChart function
NewComboBoxGrp function
AddComboOption function
Create_PageObj function
AddPageControlObj function
DestroyPageControl function
DestroyPage function
Set_Label function
Get_Label function
Get_SlidebarValue function
SetGraphChartPoints function
SetHistogramPoints function
GetObjStatus function
GetComboOptionActive function
ResetComboOptionActive function
GetComboOptionLabel function
SetComboOptionLabel function
SetIconImage function
ShowPage function
RefreshPage function
RefreshPageControl function
ChangePage function.
22/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library firmware

4.1.1 NewLabel API global function

Ta bl e 6 describes the NewLabel function:
Table 6. NewLabel API function
Name Description
Function name NewLabel
Function prototype
Behavior description Create and initialize a new Label Object (a C structure)
Input parameter {x}
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Required preconditions None
GL_PageControls_TypeDef* NewLabel (char* oName, char* Label, GL_Direction_direction, GL vu8 FontSize, GL vuint16_t color)
oName: object name Label: text on a Label Object Direction: the direction to follow printing the Label FontSize: the size of the font: FONT_BIG or FONT_SMALL Color: color of the Label text
Called functions No API/HAL layer functions
Example:
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declares and initiates a Label Object and add it with specified coordinates to a Page Object */ GL_PageControls_TypeDef* pageLabel = NewLabel("pageLabel","Graphic Library", GL_HORIZONTAL, GL_FONT_BIG, GL_Blue); AddPageControlObj((uint16_t)((LCD_Width/11)*9),(uint8_t)(LCD_Height/11),pageLabel, &page1);
Once a Label Object instance is created using the NewLabel function, the Label Object itself provides all its features through its internal function pointers.
Figure 14, 15, 16, show, in detail, the Label Object properties and methods which the final
application can use to interact with.
Doc ID 16918 Rev 5 23/105
Multi-input embedded GUI library firmware AN3128

4.1.2 NewButton API global function

The button object is the most used and its graphical look changes temporarily during the interaction between the touchscreen or the joystick. In fact there are two looks for the button as well as for the majority of the others objects.
When the button is pressed, its “graphical look” changes for a few moments and then returns to the starting aspect.
Inside the button, it's possible to insert a text Label, by which the button width itself depends. The library automatically fits the width and places the text in the center.
Figure 6. Button graphical layout
Ta bl e 7 describes the NewButton function:
Table 7. NewButton API function
Name Description
Function name NewButton
Function prototype
Behavior description Create and initialize a new button object (a C structure)
Input parameter {x}
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Required preconditions None
Called functions No API/HAL layer functions
GL_PageControls_TypeDef* NewButton (char* oName, char* Label, void* (*pEventHandler)(void))
oName: object name Label: Label on button pEventHandler: pointer to function associated to its touch event
Example:
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declares & initiates a Button Object and add it with specified coordinates to a Page Object */ GL_PageControls_TypeDef* TestBtn = NewButton("TestBtn", "Test Button", TestBtnFunc); AddPageControlObj((uint16_t)((LCD_Width/10)*6), (uint8_t)((LCD_Height/9)*4), TestBtn, &page1);
Once a button object instance is created using the NewButton function, the button object itself provides all its features through its internal function pointers.
24/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library firmware
Figure 14, 15, 16, show, in detail, the button object properties and methods which the final
application can use to interact with.

4.1.3 NewCheckbox API global function

The checkbox object follows a Boolean principle so its value can be defined in a binary way (0/1).
A typical example of this kind of object could be enable/disable a variable concerning a specified feature/option.
Figure 7. Checkbox graphical layout
Ta bl e 8 describes the NewCheckbox function:
Table 8. NewCheckbox API function
Name Description
Function name NewCheckbox
Function prototype
Behavior description Create and initialize a new Label Object (a C structure)
Input parameter {x}
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
GL_PageControls_TypeDef* NewCheckbox (char* oName, char* Label, void* (*pEventHandler)(void))
oName: object name Label: Label for the checkbox pEventHandler: pointer to function associated to its touch event
Required preconditions None
Called functions No API/HAL layer functions
Example
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declares and initiates a Checkbox Object and add it with specified coordinates to a Page Object */ GL_PageControls_TypeDef* CheckBox = NewCheckbox("CheckBox", "Enable", CheckboxFunc); AddPageControlObj((uint16_t)((LCD_Width/10)*7),(uint8_t)((LCD_Height/9)*4),CheckBox, &page1);
Once a checkbox object instance is created using the NewCheckbox function, the checkbox object itself provides all its features through its internal function pointers.
Figure 14, 15, 16, show, in detail, the Checkbox object properties and methods which the
final application can use to interact with.
Doc ID 16918 Rev 5 25/105
Multi-input embedded GUI library firmware AN3128

4.1.4 NewSwitch API global function

The switch object or SwitchButton is very similar to the button object and actually contains all its features, the only difference being that when this object is stimulated through the touchscreen or the joystick, its state, and then its graphical look, change permanently until a new press event.
The most obvious function of this object is to change the status of a Boolean/Binary variable (0/1) and so enable/disable something.
Figure 8. Switch graphical layout
Ta bl e 9 describes the NewSwitch function:
Table 9. NewSwitch API function
Name Description
Function name NewSwitch
Function prototype
Behavior description Create and initialize a new Label Object (a C structure)
Input parameter {x}
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Required preconditions None
Called functions No API/HAL layer functions
GL_PageControls_TypeDef* NewSwitch (char* oName, char* Label_1, char* Label_2, void* (*pEventHandler)(void))
oName: object name Label_1: Label on not clicked switch button Label_2: Label on clicked switch button pEventHandler: pointer to function associated to its touch event
Example
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declares and initiates a Switch Object and add it with specified coordinates to a Page Object */ GL_PageControls_TypeDef* EnDisBtn = NewSwitch("EnDisBtn","Enable","Disable",MyFunc); AddPageControlObj((uint16_t)((LCD_Width/10)*6),(uint8_t)((LCD_Height/9)*4),EnDisBtn, &page1);
Once a switch object instance is created using the NewSwitch function, the switch object itself provides all its features through its internal function pointers.
Figure 14, 15, 16, show, in detail, the switch object properties and methods which the final
application can use to interact with.
26/105 Doc ID 16918 Rev 5
AN3128 Multi-input embedded GUI library firmware

4.1.5 NewIcon API global function

This object allows the user to show an arbitrary image on the LCD, stored in the Flash memory of the MCU, and associate the press event of the image itself through the touchscreen or the joystick.
Ta bl e 1 0 describes the NewIcon function:
Table 10. NewIcon API function
Name Description
Function name NewIcon
GL_PageControls_TypeDef* NewIcon (char* oName, GL_uint8_t*
Function prototype
Behavior description Create and initialize a new icon object (a C structure)
Input parameter {x}
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Image_PTR, GL_uint16_t Width, GL_uint8_t Height, void* (*pEventHandler)(void))
oName: object name Image_PTR: icon image pointer Width: image width Height: image height pEventHandler: pointer to function associated to its touch event
Required preconditions None
Called functions No API/HAL layer functions
Example:
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declare and initiate a Icon Object and add it with specified coordinates to a Page Object */ GL_PageControls_TypeDef* MyIcon = NewIcon ("MyIcon", NULL, 90, 90, NullFunc); AddPageControlObj( (uint16_t)((LCD_Width/2)+45),(uint8_t)((LCD_Height/2)+45),MyIcon, &page1 );
Once an icon object instance is created using the icon function, the icon object itself provides all its features through its internal function pointers.
Figure 14, 15, 16, show, in detail, the icon object properties and methods which the final
application can use to interact with.
Doc ID 16918 Rev 5 27/105
Multi-input embedded GUI library firmware AN3128

4.1.6 NewRadioButtonGrp API global function

The radio button (sometimes called the option button) is a special kind of button that allows the user to choose only one of a predefined set of alternatives. Its name derives from the old car radio, where this button was used to select the preset stations. The major difference with the ordinary button is that the radio buttons are arranged in groups where the group acts as a big switchboard. In a group, only one radio button must be selected at most. Then, if in a group, the first radio button is in the selected state, and suddenly the second radio button is pressed, the first one must be immediately released going back to the normal state, and the second passes to the selected state.
Figure 9. Radio button graphical layout
Ta bl e 1 1 describes the NewRadioButtonGrp function:
Table 11. NewRadioButtonGrp API function
Name Description
Function name NewRadioButtonGrp
Function prototype GL_RadioButtonGrp_TypeDef* NewRadioButtonGrp (char* oName)
Behavior description Create and initialize a new RadioButtonGrp object (a C structure)
Input parameter {x} oName: object name
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Required preconditions None
Called functions No API/HAL layer functions
Example:
/* Declares and initiates a RadioButtonGrp Object */ GL_RadioButtonGrp_TypeDef* RadioButtonGrp = NewRadioButtonGrp("RadioButtonGrp");

4.1.7 AddRadioOption API global function

Ta bl e 1 2 describes the AddRadioOption function:
Table 12. AddRadioOption API function
Name Description
Function name AddRadioOption
GL_PageControls_TypeDef* AddRadioOption
Function prototype
Behavior description Create and initialize a new Label Object (a C structure)
28/105 Doc ID 16918 Rev 5
(GL_RadioButtonGrp_TypeDef* pThis, char* Label, void* (*pEventHandler)(void))
AN3128 Multi-input embedded GUI library firmware
Table 12. AddRadioOption API function (continued)
Name Description
GL_RadioButtonGrp_TypeDef*: pThis
Input parameter {x}
Label: Label for RadioButton option pEventHandler: pointer to function associated to its touch event
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Required preconditions NewRadioButtonGrp must have been called before
Called functions No API/HAL layer functions
Example:
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declares and initiates a RadioButton Group Object */ GL_RadioButtonGrp_TypeDef* RButtonGrp = NewRadioButtonGrp("RButtonGrp");
/* Declare/initiate a RadioOption Object and add it with specified coordinates to a Page Object */
GL_PageControls_TypeDef* ROption_a = RADIO_BUTTON_ADD(RButtonGrp,"Option1",RBtnFunc1); GL_PageControls_TypeDef
AddPageControlObj((uint16_t)(LCD_Width/2),(uint8_t)((LCD_Height/9)*3),ROption_a, &page1); AddPageControlObj((uint16_t)(LCD_Width/2),(uint8_t)((LCD_Height/9)*4),ROption_b, &page1);
* ROption_b = RADIO_BUTTON_ADD(RButtonGrp,"Option2",RBtnFunc2);
Note: As can be seen from the code above, to simplify the adding of a radio option the user should
not directly use the function “AddRadioOption()”, but must use the following macro instead:
#define RADIO_BUTTON_ADD(RadioButtonGrpName, Label, Function) \ RadioButtonGrpName->AddRadioOption(RadioButtonGrpName,Label,Function);
Once a RadioOption object instance is created using the AddRadioOption function, the RadioOption object itself provides all its features through its internal function pointers.
Figure 14, 15, 16, show, in detail, the RadioOption object properties and methods which the
final application can use to interact with.

4.1.8 NewComboBoxGrp API global function

This kind of object allows the user to choose an option from a list of alternatives that can be scrolled by selecting the up/down arrows.
Figure 10. Combobox graphical layout
Doc ID 16918 Rev 5 29/105
Multi-input embedded GUI library firmware AN3128
Ta bl e 1 3 describes the NewComboBoxGrp function:
Table 13. NewComboBoxGrp API function
Name Description
Function name NewComboBoxGrp
Function prototype GL_PageControls_TypeDef* NewComboBoxGrp (char* oName)
Behavior description Create and initialize a new
Input parameter {x} oName: object name
Output parameter {x} None
Return value The created object pointer or null if the object cannot be created
Required preconditions None
Called functions No API/HAL layer functions
ComboBoxGrp object (a C structure)
Example:
/* Declares and initiates a Page Object */ GL_Page_TypeDef page1; Create_PageObj( &page1 );
/* Declares and initiates a ComboBoxGroup Object and add it with specified coordinates to a Page Object */ GL_PageControls_TypeDef* MyComboGrp = NewComboBoxGrp("MyComboGrp"); AddPageControlObj((uint16_t)((LCD_Width/10)*8),(uint8_t)(LCD_Height/2),MyComboGrp, &page1);
Once a ComboBoxGrp object instance is created using the NewComboBoxGrp function, the ComboBoxGrp object itself provides all its features through its internal function pointers.
Figure 14, 15, 16, show, in detail, the ComboBoxGrp object properties and methods which
the final application can use to interact with.

4.1.9 AddComboOption API global function

Ta bl e 1 4 describes the AddComboOption function:
Table 14. AddComboOption API function
Name Description
Function name AddComboOption
Function prototype
Behavior description Create and initialize a new ComboBoxOption object (a C structure)
Input parameter {x}
Output parameter {x} None
Return value GL_OK if successful, GL_ERROR otherwise
30/105 Doc ID 16918 Rev 5
GL_ErrStatus AddComboOption (GL_ComboBoxGrp_TypeDef* pThis, char* Label, void* (*pEventHandler)(void))
GL_ComboBoxGrp_TypeDef*: pThis Label: Label for RadioButton option pEventHandler: pointer to function associated to its touch event
Loading...
+ 75 hidden pages