【专题STM32F103】移植STemWin5.44+ ILI9341显示无触摸屏 + cubemx+野火霸道V2

在已经做好LCD_ ILI9841的基础上,进行移植,不考虑触摸屏。

 一、无操作系统移植

第一步: 找到STemWin5.44库文件。

 

第二步:将相关文件放在Project文件夹内,设置项目相关参数。

添加:GUI_X.c  GUI_config.c  LCDConf_FlexColor_Template.c  和 STemWin_CM3_wc16_ARGB.a(无OS)  到工程内。

第三步:移植STemWin5.44

3.1 修改GUI_config.h,不适用的项目括号内填 0。

 

3.2 修改GUI_config.c

#define GUI_NUMBYTES  (1024*20)

 

3.3 修改LCDConf_FlexColor_Template.c,从上到下是:

#include "./lcd/bsp_ili9341_lcd.h"  // 添加

#define XSIZE_PHYS 240 // 修改 To be adapted to x-screen size

#define YSIZE_PHYS 320 // 修改 To be adapted to y-screen size

static void LcdWriteReg(U16 usCmd) {

// ... TBD by user
* ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_CMD ) = usCmd; // 添加
}

 static void LcdWriteData(U16 usData) {

// ... TBD by user
* ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_DATA ) = usData;// 添加
}

static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
* ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_DATA ) = *pData;// 添加
pData++;// 添加
}
}

static void LcdReadDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
*pData =* ( __IO uint16_t * ) ( FSMC_Addr_ILI9341_DATA );// 添加
pData++;// 添加
}
}

void LCD_X_Config(void) {

Config.FirstCOM = 0; //modify by fire
Config.FirstSEG = 0; //modify by fire

Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X; //修改 竖屏
Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; //修改 横屏

GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);//修改
//  查   User & Reference Guide, 通过CTRL+F 找到ILI9341 适合 GUIDRV_FLEXCOLOR_F66709   GUIDRV_FLEXCOLOR_M16C0B16参数。

}

3.4 修改GUI_X.c

void GUI_X_Delay(int ms) {
// int tEnd = OS_TimeMS + ms;
// while ((tEnd - OS_TimeMS) > 0);
HAL_Delay(ms); // 修改
}

 4.测试, 在main.c中依次加入如下代码。

#include "./lcd/bsp_ili9341_lcd.h"

#include "GUI.h" //EmWin头文件

 

ILI9341_Init (); //LCD 初始化
//绘制触摸画板界面
RCC->AHBENR|=1<<6; //开启CRC时钟
GUI_Init(); //STemwin初始化
GUI_SetBkColor(GUI_RED); //设置背景颜色
GUI_Clear(); //清屏

//其中0、3、5、6 模式适合从左至右显示文字,
//不推荐使用其它模式显示文字 其它模式显示文字会有镜像效果
//其中 6 模式为大部分液晶例程的默认显示方向
ILI9341_GramScan( 6 );
GUI_SetFont(GUI_FONT_24B_1);
GUI_DispString("Hello World!\r\nUse FreeRTOS\r\nSTemWin GUI");

 

 二、FreeRTOS操作系统移植

步骤类似,不同之处有:

第二步:将相关文件放在Project文件夹内,设置项目相关参数。

添加:GUI_X_OS.c  GUI_config.c  LCDConf_FlexColor_Template.c  和 STemWin_CM3_OS_wc16_ARGB.a(OS)  到工程内。

第三步:移植STemWin5.44

3.4 修改GUI_X_OS.c


/* FreeRTOS头文件 */
#include "FreeRTOS.h" //修改
#include "task.h" //修改
#include "semphr.h" //修改

 

static xSemaphoreHandle xQueueMutex = NULL; //修改
static xSemaphoreHandle xSemaTxDone = NULL; //修改

int GUI_X_GetTime(void)

{
//return ((int) osKernelSysTick());
return ((int) xTaskGetTickCount()); //修改
}

void GUI_X_Delay(int ms)
{
//osDelay( ms );
vTaskDelay( ms ); //修改
}

/* Init OS */
void GUI_X_InitOS(void)
{
/* Create Mutex lock */
// osMutexDef(MUTEX);
/* Create the Mutex used by the two threads */
//osMutex = osMutexCreate(osMutex(MUTEX));
/* Create Semaphore lock */
// osSemaphoreDef(SEM);
/* Create the Semaphore used by the two threads */
//osSemaphore= osSemaphoreCreate(osSemaphore(SEM), 1);

/* 创建互斥信号量 用于资源共享 */
xQueueMutex = xSemaphoreCreateMutex();//修改
configASSERT (xQueueMutex != NULL);//修改
/* 创建二值信号量 用于事件触发 */
vSemaphoreCreateBinary( xSemaTxDone );//修改
configASSERT ( xSemaTxDone != NULL );//修改
}

void GUI_X_Unlock(void)
{
//osMutexRelease(osMutex);
/* 给出互斥量 */
xSemaphoreGive(xQueueMutex);//修改
}

void GUI_X_Lock(void)
{
//osMutexWait(osMutex , osWaitForever) ;
if(xQueueMutex == NULL)//修改
{
GUI_X_InitOS();//修改
}
/* 获取互斥量 */
xSemaphoreTake(xQueueMutex, /* 互斥量句柄 *///修改
portMAX_DELAY);/* 阻塞等待 */
}

/* Get Task handle */
U32 GUI_X_GetTaskId(void)
{
//return ((U32) osThreadGetId());
return ((U32) xTaskGetCurrentTaskHandle());
}


void GUI_X_WaitEvent (void)
{
//osSemaphoreWait(osSemaphore , osWaitForever) ;
/* 获取信号量 */
while(xSemaphoreTake(xSemaTxDone, /* 信号量句柄 */ //修改
portMAX_DELAY) != pdTRUE);/* 阻塞等待 */ //修改
}


void GUI_X_SignalEvent (void)
{
//osMutexRelease(osSemaphore);
/* 给出信号量 */
xSemaphoreGive(xSemaTxDone);//修改
}

posted @ 2024-04-20 20:26  辛河  阅读(130)  评论(0编辑  收藏  举报