stmcubemx系列教程stemwim移植.docx

上传人:b****7 文档编号:11297513 上传时间:2023-02-26 格式:DOCX 页数:14 大小:19.96KB
下载 相关 举报
stmcubemx系列教程stemwim移植.docx_第1页
第1页 / 共14页
stmcubemx系列教程stemwim移植.docx_第2页
第2页 / 共14页
stmcubemx系列教程stemwim移植.docx_第3页
第3页 / 共14页
stmcubemx系列教程stemwim移植.docx_第4页
第4页 / 共14页
stmcubemx系列教程stemwim移植.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

stmcubemx系列教程stemwim移植.docx

《stmcubemx系列教程stemwim移植.docx》由会员分享,可在线阅读,更多相关《stmcubemx系列教程stemwim移植.docx(14页珍藏版)》请在冰豆网上搜索。

stmcubemx系列教程stemwim移植.docx

stmcubemx系列教程stemwim移植

STM32CubeMX系列教程24:

STemWim移

 

摘要:

本章教程率领大伙儿移植StmemWin5.22到STM32的LDTC接口操纵的RGB接口屏幕。

 

(注:

本章只针对STM32芯片F7,F4系列带LDTC接口操纵的RGB屏幕,对

F1系列通过FMC操纵的带操纵器的屏幕不适用)

 

一、STemWin简介

emWin是segger公司出一种高效的而图形用户界面,是咱们能够摆脱处置器

和显示操纵器而更专注于GUI的设计。

uCGUI是segger公司授权Micrum公司推出的,uCOS操作系统也是那个公司出的。

STemWin是SEGGER公司授权给ST的,使

用ST芯片的用户能够免费利用STemWin。

出于必然爱惜方法,STemWin的库是不能用在其他公司的处置器上,因为工程初始化STemWin前要使能CRC查验。

 

二、新建工程

本章以上一章LCD触摸操纵工程的基础上移植,复制上一章Touch的工程,修

改文件夹名。

打开

STM32cubeMX的工程文件从头配置,开启CRC校验。

 

CRC为默许配置。

 

LDTC,FMC(SDRAM),DMA2D配置仍是依照原先的设置,那个地址再也不详细简

介。

另外注意一点堆栈的大小设置大一点,不然会程序会触发硬件错误中断

(HardFault)。

 

生成报告和初始化代码,编译程序。

在ST固件库中能够找到STemWin的文件,途径:

STM32Cube_FW_F7_V1.3.0\Middlewares\ST\STemWin

其目录结构如下,其中Config为配置文件和移植相关,Lib为STemWin封装库,emWin5.22再也不提供源码,Software为电脑上用到的软件,Documentation为STemWin的利用文档。

 

将STemWin文件夹复制到工程目录下。

在下面的途径下找到Demo程序目录复制到适才的STemWin目录

STM32Cube_FW_F7_V1.3.0\Projects\STM32756G_EVAL\Applications\STemWin\STemWin_

SampleDemo

 

感动工程添加应用文件:

 

那个地址简单介绍一下STemWin的几个文件。

1.stm32746g_sdram.c为SDRAM驱动文件,程序中利用SDRAM作为LCD

的显存

2.GT811.c为触摸芯片驱动文件,TS_I2C.c为模拟I2C驱动文件

3.GUIConf.c为STemWin软件包中Config目录下的文件。

4.GUI_X.c文件为OS目录下的文件,其中GUI_X.c为不带操作系统。

版本,GUI_X_OS.c为带操作系统版本。

本实验不带OS。

 

5.LCDConf.c为LCD底层移植文件,需要用户实现。

Config目录下面提供几种移植模块。

 

本章是那个底层移植文件是复制STM32库固件STM32746G-Discovery例如程序的模

板再修改。

将那个途径下的LCDConf.c文件,和Inc目录下的LCDConf.h文件复制到

Config目录中并添加进工程。

 

STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\

Applications\STemWin\STemWin_HelloWorld\Src

 

6.为STemWin封装库文件,emWin5.22再也不提供源码,而是提供封装库。

Lib目录下含有KEIL,IRA和GCC三个编译环境的库,而且还区分带OS和不带OS版本。

本教程选择KEIL不带OS版本。

 

7.Demo程序里面包括很多显示程序,为STemWin的例如程序,展现

STemWin的各类控件的功能。

直接复制固件库STM32756G_EVAL的STemWin

Demo程序途径如下:

STM32Cube_FW_F7_V1.3.0\Projects\STM32756G_EVAL\Applications\STemWin\STemWin_SampleDemo

 

最后要添加目录的途径到工程。

 

三、STemWin底层移植

 

最后修改一下底层移植文件,GUI_Init初始化流程图如下(可能有些函数有改

变)。

 

底层移植主若是GUI_X_Config()、LCD_X_Config()和LCD_X_DisplayDriver()

三个函数。

 

打开GUIConf.c文件,找到下面宏概念

 

01//

02//DefinetheavailablenumberofbytesavailablefortheGUI

03//

04#defineGUI_NUMBYTES

(1024)*150

05

0/*****************************************************************

6****

07*

08*Publiccode

09*

1******************************************************************

1****

11*/

1/*****************************************************************

2****

13*

14*

GUI_X_Config

15*

16*Purpose:

*

Calledduringtheinitializationprocessinordertosetup

17the

18*

availablememoryfortheGUI.

19*/

20voidGUI_X_Config(void){

21//

22//32bitalignedmemoryarea

23//

24staticU32aMemory[GUI_NUMBYTES/4];

25//

26//AssignmemorytoemWin

27//

28GUI_ALLOC_AssignMemory(aMemory,GUI_NUMBYTES);

29//

30//Setdefaultfont

31//

32GUI_SetDefaultFont(GUI_FONT_6X8);

33}

 

此处初始化GUI可用内存,宏概念GUI的内存大小改小一点,不然编译程序会提示空

间不足错误。

 

1//DefinetheavailablenumberofbytesavailablefortheGUI

2//

3#defineGUI_NUMBYTES

(1024)*150

 

LCD_X_Config()和LCD_X_DisplayDriver()函数能够在LCDConf.c文件中找到,下载

重点讲解一下如何修改一下LCDConf.c文件.

 

#defineXSIZE_PHYS480#defineYSIZE_PHYS272

 

改成

 

#defineXSIZE_PHYS1024#defineYSIZE_PHYS600

 

2.修改图像格式,此处改成RGB565格式。

程序中设置的是单层显示,故只需

layer0;

#defineCOLOR_CONVERSION_0GUICC_M8888I

#defineDISPLAY_DRIVER_0GUIDRV_LIN_32

 

改成

 

01

#defineCOLOR_CONVERSION_0

GUICC_M565

02

#defineDISPLAY_DRIVER_0

GUIDRV_LIN_16

03

04

/**

05

*@brief

ReturnPixelformatforagivenlayer

06

*@param

LayerIndex:

LayerIndex

07

*@retvalStatus(0:

0k,1:

error)

08

*/

09staticinlineU32LCD_LL_GetPixelformat(U32LayerIndex)10{

11if(LayerIndex==0)

12{

13returnLTDC_PIXEL_FORMAT_RGB565;

14}

15else

16{

17returnLTDC_PIXEL_FORMAT_ARGB1555;

18}

19}

 

上面函数中也改成

 

returnLTDC_PIXEL_FORMAT_RGB565;

 

3.修改显存地址,Open746I-C的SDRAM接到区域2,起始地址为0xD000

0000。

1

/*FromSDRAM*/

2

#defineLCD_LAYER0_FRAME_BUFFER

((int)0xC0200000)

3

#defineLCD_LAYER1_FRAME_BUFFER

((int)0xC0400000)

4

5

/*FromSDRAM*/

6

#defineLCD_LAYER0_FRAME_BUFFER

((int)0xD0200000)

7

#defineLCD_LAYER1_FRAME_BUFFER

((int)0xD0400000)

 

LCD_LL_LayerInit函数中图层的地址也改成

 

layer_cfg.FBStartAdress=((uint32_t)0xD0000000);

4.由于DMA2D、LTDC的初始化已经有Cube自动生成的,故不需再在

LCDConf.c中初始化。

LTDCandDMA2DBSPRoutines部份的初始化函数能够注释掉。

下面两个变量也注

释掉

 

LTDC_HandleTypeDefhltdc;

staticDMA2D_HandleTypeDefhdma2d;

 

添加ltdc.h、dma2d.h头文件

/*Includes----------------------------------------------------------

--------*/

#include"LCDConf.h"#include"GUI_Private.h"#include"ltdc.h"#include"dma2d.h"

 

另外一下其他改动我就不详细说明了,我那个地址提供一个已经修改好的文件。

 

Dem总包括的头文件去掉,改成

 

#include"stm32f7xx_hal.h"

编译程序,看程序还有错误提示。

 

四、编辑应用程序

 

在main函数中添加应用程序,程序中先初始化SDRAM,GUI和GT811触摸

操纵芯片。

最后挪用Demomain函数展现各类酷炫成效。

01

/*USERCODEBEGIN2*/

02

/*InitializestheSDRAMdevice*/

03

BSP_SDRAM_Init();

04

05

/*InittheSTemWinGUILibrary*/

06

GUI_Init();

07

08

/*InitializetheGT811*/

09

GT811_Init();

10

11

/*Activatetheuseofmemorydevicefeature*/

12

WM_SetCreateFlags(WM_CF_MEMDEV);

13

14/*StartDemo*/

15GUIDEMO_Main();

16/*USERCODEEND2*/

 

STemWin的触屏移植只若是通过GUI_TOUCH_StoreStateEx函数不断将当前的触摸状态更新到GUI即可。

能够按时器周期性的挪用那个函数,本校准是通过触摸中断函数处置,当有触摸时触发外部中断,然后掉用次函数更新坐标到

GUI。

在main.c文件后面添加中断效劳函数。

01

/*USERCODEBEGIN4*/

02

/**

*@brief

ProvidetheGUIwithcurrentstateofthetouch

03screen

04

*@param

None

05

*@retvalNone

06

*/

07voidBSP_Pointer_Update(void)

08

{

09

GUI_PID_STATETS_State;

10

TS_StateTypeDef

ts={0};

11

12

GT811_GetState(&ts);

13

14TS_State.Pressed=ts.touchDetected&0x01;

15if(TS_State.Pressed!

=0)

16{

17

TS_State.Layer=0;

18

=

ts.touchX[0];

19

=

ts.touchY[0];

20

GUI_TOUCH_StoreStateEx(&TS_State);

21}

22}

23

24/**

25*@}

26*/

27voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin)

28{

29if(GPIO_Pin==GPIO_PIN_7)

30{

31BSP_Pointer_Update();

32}

33}

34/*USERCODEEND4*/

 

另外GUI需要一个时基源,本教程用SysTick作为GUI的时基源。

stm32f7xx_it.c文件中添加GUIt头文件已经声明外部变量OS_TimeMS。

 

1

/*USERCODEBEGIN0*/

2

#include"GUI.h"

3externvolatileGUI_TIMER_TIMEOS_TimeMS;4/*USERCODEEND0*/

 

在SysTick中断处置函数中添加语句,使OS_TimeMS加1计时。

 

01/**

02*@briefThisfunctionhandlesSystemticktimer.

03*/

04voidSysTick_Handler(void)

05{

06/*USERCODEBEGINSysTick_IRQn0*/07

 

08/*USERCODEENDSysTick_IRQn0*/

9HAL_IncTick();

10HAL_SYSTICK_IRQHandler();

11/*USERCODEBEGINSysTick_IRQn1*/

12OS_TimeMS++;

13/*USERCODEENDSysTick_IRQn1*/

14}

 

最后编译程序,并下载到开发板,若是没有错误那么LCD上会显示各类酷炫吊炸天的界面。

第一说明下开发条件:

1、开发板:

秉火霸道,STM32F103ZET

2、软件:

(F1V1.60库)

 

移植中注意的问题:

 

1、裸机移植STemWin时,TFT液晶屏驱动函数所在文件不能是“LCD.C”和“LCD.h”(不区分大小写),这一步比较重要,因为STemWin的库中有一个“LCD.h”的头文件!

 

在文件中的voidLCD_X_Config(void)函数里面的最后一句话为:

 

GUIDRV_FlexColor_SetFunc(pDevice,&PortAPI,GUIDRV_FLEXCOLOR_F66708,

GUIDRV_FLEXCOLOR_M16C0B16);

咱们需要修改的是GUIDRV_FLEXCOLOR_F66708那个参数。

GUIDRV_FLEXCOLOR_F66708

那个参数的修改要依照你的TFT屏所利用的

驱动芯片,如我的TFT利用的驱动芯片是“ILI9325”,因此GUIDRV_FLEXCOLOR_F66708。

若是你的是“ILI9341”,那么就改成GUIDRV_FLEXCOLOR_F66709。

若是是其它型号的驱动芯片那么需要查询的用户手册然后进行修改。

用户手册

可在“STemWinLibrary532”文件夹中的“STemWinLibrary532\Documentation”目录下找到,

该手册是一份PDF文档,...

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1