一、准备基础程序

基于正点原子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#endifGUI_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#endifreturn 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);      //串口初始化为115200LED_Init();               //LED端口初始化TFTLCD_Init();            //LCD初始化    KEY_Init();             //按键初始化FSMC_SRAM_Init();        //初始化SRAMmy_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

STM32移植STemwin相关推荐

  1. stm32使用自定义打点函数方式移植stemwin

    stm32使用自定义打点函数方式移植stemwin 背景 显示过程 移植简述 打点函数 stemwin移植要点 实物效果 背景 oled屏移植stemwin,有两种方式,通过自定义打点方式进行移植,或 ...

  2. 玩转RT-Thread系列教程(6)--移植STemwin

    玩转RT-Thread系列教程(6)–移植STemwin 一.STemwin介绍 在实际应用中我们时常需要制作 UI 界面来实现人机交互,简单的 UI 我们可以自己直接写代码,但是对于那些复杂的交互方 ...

  3. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  4. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和不能接收数据问题讨论

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  5. contiki STM32移植

    1.contiki简介 [2016年6月更新 强烈建议各位使用arm-none-eabi-gcc工具链,推荐在Instant Contiki中开发Contiki应用,不推荐使用IAR] "C ...

  6. micropython STM32移植笔记(一)

    micropython STM32移植笔记(一) 首先,我是一个搞硬件的,说白了是做电路的,呵呵... 一直想学一些软件,只会搞硬件的工程师是没有灵魂的,画了7年的PCB板卡了,但是每次调试硬件都要求 ...

  7. 超详细!!!STM32F407ZGT6HAL库移植STemwin(基于正点原子最小系统板+GUIBuilder)

    第一次写博客,我以为会是点灯的,没想到留给了GUI,但是第一次写,可能写的不够好欢迎大家批评指正. 最近由于比赛的要求,需要给自己的LCD设计GUI界面,在查了一些资料后,决定先学STemwin然后学 ...

  8. ST7701芯片820*320屏幕移植stemwin

    简要说明 如题,公司最近更换820*320屏幕,移植stemwin,使用3线spi通讯+16RGB,这屏幕工作流程为:首先通过3线spi发送初始化指令,之后通过16bitRGB发送像素点. 移植过程参 ...

  9. STM32移植uC/OSIII

    坚持就是胜利 一.UCOS简介 01 简介 02 uC/OS-III的任务 03 其他介绍 二.操作过程 01 题目要求 02 配置CubeMX 03 下载代码 04 移植代码 05 效果展示 三.实 ...

最新文章

  1. Java程序的运行原理 用记事本编写Java代码
  2. 关于DWG文件转换成PDF
  3. 基于OpenCV的视频处理管道
  4. mplus 软件_Mplus 7.4 软件及代码
  5. 网盘php资料,怎么搜索百度网盘里的资料(php版)
  6. volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)
  7. R中大数据量数据框的合并慎重使用rbind
  8. (转) Hibernate框架基础——操纵持久化对象的方法(Session中)
  9. 零基础带你学习MySQL—数学函数(十四)
  10. Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
  11. ASP.NET伪静态的实现及伪静态的意义
  12. DataGrid + JS 的應用示例
  13. 什么电脑在线录音软件好用
  14. XTU 1336 Perfect Palindrome Number
  15. 移动硬盘变为raw格式时,如何进行数据恢复
  16. OSChina 周四乱弹 —— 懦夫!你就不能找富婆吗
  17. [Python]第一章(建议收藏)
  18. UE4 使用自发光材质作为烘焙光源
  19. 设计模式中,MVC模式与MVT模式的区别
  20. 08年十大可能被炒CEO出炉 AMD鲁毅智位列第一

热门文章

  1. mysql 不用斯芬克斯 全局模糊匹配 查询
  2. mysql 1.4安装步骤_从零开始搭建系统1.4——MySql安装及配置
  3. 【ArcGIS|空间分析】空间分析准备流程
  4. php在线打包(hacklog修改版),wordpress配置记录
  5. 【模型训练】YOLOv7反光衣检测
  6. proteus常用元器件中英查询表
  7. BT-Panel Linux自动磁盘挂载工具
  8. 数值分析-多项式插值方法小结
  9. 计算机机房标准pdf,计算机机房建设标准(范文).pdf
  10. 搭建Ubuntu的51单片机开发环境(学习记录)