HAL库添加STemWin移植
先放一个链接,这个使用HAL库点的屏,现在添加STemWin
HAL点屏
网上这个的教程很多,我这个也是参考其他大佬的,但是,我发现好多都写的很简洁,所以就在这里再写一下,也算学习记录了。先推荐一个大神写的,也是超详细的so_cracy的文章 STemwin 系列(一)STM32 HAL库 裸机移植STemwin
首先是准备工作,先去官网下载这个包,然后把对应的东西放进程序里
- 修改GUIConf.c文件
这个大小可以根据自己的情况定义,使用的大就多分配点
#define GUI_NUMBYTES 1024*20//0x200000
-
修改LCDConf_FlexColor_Template.c文件,以下注释里就是添加的东西,这个学习过LCD屏的同学都很熟悉,注意这里没有添加读的程序。
/******************************************************************** * * LcdWriteReg * * Function description: * Sets display register */ static void LcdWriteReg(U16 Data) { // ... TBD by user WR_CMD(Data);//添加 } /******************************************************************** * * LcdWriteData * * Function description: * Writes a value to a display register */ static void LcdWriteData(U16 Data) { // ... TBD by user WR_DATA(Data);//添加 } /******************************************************************** * * LcdWriteDataMultiple * * Function description: * Writes multiple values to a display register. */ static void LcdWriteDataMultiple(U16 * pData, int NumItems) { while (NumItems--) { // ... TBD by user WR_DATA(*pData++);//添加 } }
-
修改LCDConf_FlexColor_Template.c文件里屏的驱动,颜色翻转及显示方向,在void LCD_X_Config(void) 函数里
(1)颜色型号
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUI_COLOR_CONV_565, 0, 0);
可以供选择的颜色项有
/*********************************************************************
*
* Compatibility defines for older versions
*/
#define GUI_COLOR_CONV_1 GUICC_1
#define GUI_COLOR_CONV_2 GUICC_2
#define GUI_COLOR_CONV_4 GUICC_4
#define GUI_COLOR_CONV_8666 GUICC_8666
#define GUI_COLOR_CONV_888 GUICC_888
#define GUI_COLOR_CONV_8888 GUICC_8888
#define GUI_COLOR_CONV_565 GUICC_565
#define GUI_COLOR_CONV_M565 GUICC_M565
/*********************************************************************
(2)设置显示方向
Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_X;
可供选择项,根据组合,共用7种情况可配置
/* General orientation flags */
#define GUI_MIRROR_X (1 << 0)
#define GUI_MIRROR_Y (1 << 1)
#define GUI_SWAP_XY (1 << 2)
(3) 设置驱动及颜色位数
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66712, GUIDRV_FLEXCOLOR_M16C0B16);
驱动可选项,这个根据所用屏的驱动IC查询STemWin532.pdf文件,这个文件在下载的目录里
例如我使用的屏,根据文档,查询到的是ST7789V
然后查询到驱动是这个66709
// Controller selection
#define GUIDRV_FLEXCOLOR_F66702 GUIDRV_FlexColor_SetFunc66702
#define GUIDRV_FLEXCOLOR_F66708 GUIDRV_FlexColor_SetFunc66708
#define GUIDRV_FLEXCOLOR_F66709 GUIDRV_FlexColor_SetFunc66709
#define GUIDRV_FLEXCOLOR_F66712 GUIDRV_FlexColor_SetFunc66712
#define GUIDRV_FLEXCOLOR_F66714 GUIDRV_FlexColor_SetFunc66714
#define GUIDRV_FLEXCOLOR_F66715 GUIDRV_FlexColor_SetFunc66715
#define GUIDRV_FLEXCOLOR_F66718 GUIDRV_FlexColor_SetFunc66718
#define GUIDRV_FLEXCOLOR_F66719 GUIDRV_FlexColor_SetFunc66719
#define GUIDRV_FLEXCOLOR_F66720 GUIDRV_FlexColor_SetFunc66720
#define GUIDRV_FLEXCOLOR_F66721 GUIDRV_FlexColor_SetFunc66721
#define GUIDRV_FLEXCOLOR_F66722 GUIDRV_FlexColor_SetFunc66722
#define GUIDRV_FLEXCOLOR_F66772 GUIDRV_FlexColor_SetFunc66772
不过有的时候有的文档写的不一定对,如果测试显示不了,那就只能一个一个试了,我就是遇到这样的情况,真是。。
-
添加屏幕驱动程序
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) { int r; (void) LayerIndex; (void) pData; switch (Cmd) { case LCD_X_INITCONTROLLER: { // // Called during the initialization process in order to set up the // display controller and put it into operation. If the display // controller is not initialized by any external routine this needs // to be adapted by the customer... // // ... LCD_Init();//添加 return 0; } default: r = -1; } return r; }
最后就是在程序开始添加初始化程序了,这个CRC CLK是必须要添加的
__HAL_RCC_CRC_CLK_ENABLE();
GUI_Init();
好像有的资料还表示需要添加
extern __IO int32_t OS_TimeMS;
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
OS_TimeMS++;
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
}
嗯,大功告成,测试一下
GUI_SetBkColor(GUI_BLUE); //设置背景颜色
GUI_SetColor(GUI_YELLOW); //设置颜色
GUI_Clear(); //清屏
GUI_SetFont(&GUI_Font24_ASCII); //设置字体
GUI_DispStringAt("HELLO WORD!", 0, 0);
GUI_DispStringAt("123456789", 0, 100);