HAL库添加STemWin移植

HAL库添加STemWin移植

先放一个链接,这个使用HAL库点的屏,现在添加STemWin
HAL点屏

网上这个的教程很多,我这个也是参考其他大佬的,但是,我发现好多都写的很简洁,所以就在这里再写一下,也算学习记录了。先推荐一个大神写的,也是超详细的so_cracy的文章 STemwin 系列(一)STM32 HAL库 裸机移植STemwin

首先是准备工作,先去官网下载这个包,然后把对应的东西放进程序里
在这里插入图片描述

  1. 修改GUIConf.c文件

这个大小可以根据自己的情况定义,使用的大就多分配点

	  #define GUI_NUMBYTES  1024*20//0x200000
  1. 修改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++);//添加
       }
     }
    
  2. 修改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

不过有的时候有的文档写的不一定对,如果测试显示不了,那就只能一个一个试了,我就是遇到这样的情况,真是。。

  1. 添加屏幕驱动程序

     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);	
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值