STM32移植STemwin

您所在的位置:网站首页 gd32可以用emwin STM32移植STemwin

STM32移植STemwin

2023-09-23 21:44| 来源: 网络整理| 查看: 265

        一、准备基础程序 基于正点原子stm32战舰开发板的移植 1、    正点原子程序下载:

资料盘 战舰  开发板资料A盘: https://pan.baidu.com/s/1qZgG-UAznhQWgGcX8yFduQ 提取码:zz5e

 因为需要用到malloc,选择实验37 内存管理实验。

2、更改基本文件

1、创建FWLIB文件夹

2、把STM32F10xx_FWLib文件夹装入新建的FWLIB文件中

 打开工程会发现FWLib出现图示情况。

很明显,文件无法正常使用,是因为更改了STM32F10xx_FWLib文件夹路径,则需要重新添加文件

第一步:右键FWLib文件夹 选择 RemoveGroup ‘FWLib’ and its Files

 第二步:根据下图所示操作

 选择创建的FWLIB文件中STM32F10xx_FWLib文件下的src文件夹并选择上图出错文件并添加

第三步、更改头文件路径

 更改完成,记住运行一下程序,到这里按照步骤来是不会出现错误的;如果有错检查一下文件是否添加完全。

 3、LCD文件的更改

1.打开文件下的hardware找到LCD文件,并把LCD文件名改成其他(可以根据自己喜好更改)避免与emwin文件冲突

 2.更改程序中的lcd

此时可以看到程序中lcd.c文件出现警告,跟之前更改库文件同样步骤,这里就不重复展示。

 添加之后就需要在代码中更改引用的头文件了,此时可以跑一遍程序,根据错误提示一步一步修改,直至无错误。

3.修改ILI93xx.h文件中 LCD的宏定义(战舰版精英版有,mini版无)

此处可以随意命名,目的是防止与emwin文件中的LCD函数冲突。

既然修改了宏定义,那么ILI93xx.c文件中的LCD函数同样需要更改(同样,可以先运行程序,根据错误提示,一步一步修改,直至无错)

还有就是修改LCD_Init()同样为了防止与emwin冲突,这里我们把LCD_Init();函数修改成TFTLCD_Init()

 头文件

 main.c

到这里,基础程序就已经准备完成了,接下来就是STemwin的移植。

二、导入STemwin文件 1、下载emwin文件

1.ST意法半导体官网下载:(目前根据正点原子教程,不管是stemwin还是cubeF1下载的文件因为更新迭代的原因,与教程都无法对应上,所以目前直接从正点原子提供的资料中复制出来。后续若找到对应步骤,会补上这一块)

emwin:STemWin - 用于构建图形用户界面(GUI)的专业图形栈库(AN4323) - STMicroelectronics

cubeF1:

STM32CubeF1 - STM32Cube MCU包,用于STM32F1系列(HAL、底层API和CMSIS(CORE、DSP和RTOS)、USB、TCP/IP、File system、RTOS和Graphic - 附带在以下ST板上运行的示例:STM32 Nucleo、探索套件和评估板) - STMicroelectronics

2、导入emwin文件

可以在正点原子资料盘一下路径找到cubeF1压缩包(资料盘(A盘)\6,软件资料\3,EMWIN学习资料\3,EMWIN学习资料)

解压并打开找到STemwin文件夹,直接把STemwin复制到自己的工程文件夹下

 接下来就是添加需要用到的emwin文件。同样的步骤,在如图所画的文件夹,添加右侧所示文件

此时发现添加好的文件都带有一个符号,表示此文件是只读文件,需要去修改文件属性

 右键STemwin文件夹,代开属性,把图中的只读取消勾选。

更改之后就可以看到,之前的符号已经消失,文件可以被更改了。

 同样,还有头文件路径的添加(凡是有.h文件的路径都添加,就算不用也没错)

在添加kile的lib文件  (STemwin\STemWin\Lib)使用带操作系统的就选OS 不带操作系统的就用STemwin526_CM3_Keil.lib

 其余不用的lib文件都可以删除

到这里可以尝试跑一下程序,会出现下图错误

找不到LCDCondf.h,这时就需要我们自己添加一个LCDConf.h文件

右键STemwin文件夹,选择Add New Item to.....;如图所示,添加LCDConf.h文件

 文件中写入如下代码(也可不写)

#ifndef LCDCONF_H #define LCDCONF_H #endif

 此时再编译,就不会报错了。

接下来就是修改emwin文件的代码;首先是GUIConf.c、GUIConf.h文件(源文件过于复杂,精简下来有用的就这一点)

修改GUIDRV_Template.c文件 ,这个文件需要修改SetPixelIndex(), _GetPixelIndex(),_FillRect()和_DrawBitBPP();

1.打点函数和读点函数修改

应用了ILI93xx的函数,所以需要加入头文件

/********************************************************************* 打点函数 */ static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex) { LCD_Fast_DrawPoint(x,y,PixelIndex); } /********************************************************************* * 读点函数 */ static unsigned int _GetPixelIndex(GUI_DEVICE * pDevice, int x, int y) { unsigned int PixelIndex; #if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1) int xPhys, yPhys; xPhys = LOG2PHYS_X(x, y); yPhys = LOG2PHYS_Y(x, y); #else #define xPhys x #define yPhys y #endif GUI_USE_PARA(pDevice); GUI_USE_PARA(x); GUI_USE_PARA(y); { PixelIndex = LCD_ReadPoint(x,y); } #if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0) #undef xPhys #undef yPhys #endif return PixelIndex; }

填充函数

* _FillRect 填充函数 */ static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) { LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX); }

16BPP优化

/********************************************************************* * * Draw Bitmap 16 BPP, not optimized * * Purpose: * Drawing of 16bpp high color bitmaps. * Only required for 16bpp color depth of target. Should be removed otherwise. */ static void _DrawBitLine16BPP(GUI_DEVICE * pDevice, int x, int y, U16 const GUI_UNI_PTR * p, int xsize) { LCD_PIXELINDEX pixel; LCD_SetCursor(x,y); *(__IO uint16_t *)(UCGUI_LCD_CMD) = lcddev.wramcmd; //写入颜色值 for (;xsize > 0; xsize--, x++, p++) { pixel = *p; *(__IO uint16_t *)(UCGUI_LCD_DATA) =pixel; } }

修改之后会发现这两个函数报错:UCGUI_LCD_CMD,UCGUI_LCD_DATA,此时就需要在前面写入宏定义

修改LCDConf_FlexColor_Template.c文件  此文件很多函数不用,所以直接贴代码

#include "GUI.h" #include "ILI93xx.h" #include "GUIDRV_FlexColor.h" //屏幕大小 #define XSIZE_PHYS 320 //X轴 #define YSIZE_PHYS 240 //Y轴 #define VXSIZE_PHYS 320 #define VYSIZE_PHYS 240 //配置检查 #ifndef VXSIZE_PHYS #define VXSIZE_PHYS XSIZE_PHYS #endif #ifndef VYSIZE_PHYS #define VYSIZE_PHYS YSIZE_PHYS #endif #ifndef XSIZE_PHYS #error Physical X size of display is not defined! #endif #ifndef YSIZE_PHYS #error Physical Y size of display is not defined! #endif #ifndef GUICC_565 #error Color conversion not defined! #endif #ifndef GUIDRV_FLEXCOLOR #error No display driver defined! #endif //配置程序,用于创建显示驱动器件,设置颜色转换程序和显示尺寸 void LCD_X_Config(void) { GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_M565, 0, 0); //创建显示驱动器件 LCD_SetSizeEx (0, lcddev.width, lcddev.height); LCD_SetVSizeEx (0, lcddev.width, lcddev.height); } //显示器驱动的回调函数 int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) { int r; (void) LayerIndex; (void) pData; switch (Cmd) { case LCD_X_INITCONTROLLER: { //当初始化的时候被调用,主要是设置显示控制器,如果显示控制器在外部初始化则需要用户初始化 // TFTLCD_Init(); //初始化LCD 已经在开始初始化了,所以此处不需要初始化。 return 0; } default: r = -1; } return r; }

到这里,基本已经修改完成了,可以试着编译一下;可以优化一下STemwin文件夹,相较来说,STemwin占用内存过大,优化可直接删除不用的文件夹,如下图所示

三、调用STemwin

        在修改完程序后,此时就可以在main函数里面调用STemwin了,不要忘记添加头文件

示例:

#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "ILI93xx.h" #include "usart.h" #include "sram.h" #include "malloc.h" #include "GUI.h" /************************************************ ALIENTEK精英STM32开发板STemWin实验 STemWin 移植实验 技术支持:www.openedv.com 淘宝店铺:http://eboard.taobao.com 关注微信公众平台微信号:"正点原子",免费获取STM32资料。 广州市星翼电子科技有限公司 作者:正点原子 @ALIENTEK ************************************************/ int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //LED端口初始化 TFTLCD_Init(); //LCD初始化 KEY_Init(); //按键初始化 FSMC_SRAM_Init(); //初始化SRAM my_mem_init(SRAMIN); //初始化内部内存池 my_mem_init(SRAMEX); //初始化外部内存池【 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC时钟,否则STemWin不能使用 // WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Init(); // GUIDEMO_Main(); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_RED); GUI_SetFont(GUI_FONT_24_ASCII); GUI_Clear(); GUI_DispStringAt("HELLO WORLDsdsdsd",100,100);//显示字符串 while(1); } 四、结果展示

示例程序:

百度网盘:链接:https://pan.baidu.com/s/1InASyinDMdrtmEFften5EA?pwd=wf3b  提取码:wf3b



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3