Страницы

Страницы

четверг, 21 июня 2018 г.

Touchscreen function correction

static void BSP_Pointer_Update(void)
{
GUI_PID_STATE TS_State;
static TS_StateTypeDef prev_state;
TS_StateTypeDef ts;
uint16_t xDiff, yDiff;

BSP_TS_GetState(&ts);

TS_State.Pressed = ts.TouchDetected;

xDiff = (prev_state.X > ts.X) ? (prev_state.X - ts.X) : (ts.X - prev_state.X);
yDiff = (prev_state.Y > ts.Y) ? (prev_state.Y - ts.Y) : (ts.Y - prev_state.Y);

//if(ts.TouchDetected)
//{
if((prev_state.TouchDetected != ts.TouchDetected )|| (ts.TouchDetected &&
((xDiff > 3 )||
(yDiff > 3))))
{
prev_state = ts;

TS_State.Layer = 0;
TS_State.x = ts.X;
TS_State.y = ts.Y;

GUI_TOUCH_StoreStateEx(&TS_State);
if(ts.TouchDetected)
osDelay(50);
}
//}
}

среда, 13 июня 2018 г.

New version GUIBuilder from Segger color setting

For set color operations

Old (5.28) example
GUI_SetBkColor(0x00361400);

New (5.40) example
GUI_SetBkColor(GUI_MAKE_COLOR(0x00361400));

вторник, 12 июня 2018 г.

CubeMX 4.25 & 4.26 GRAPHICS configuration MULTIBUF bug

If we create a graphics window for GRAPHICS configuration with GUIBuilder for file GUI_App.c

CreateWindow();



The CubeMX is creates function in file STemwin_wrapper.c



void GRAPHICS_Init(void)
{
/* Initialize the GUI */
GUI_Init();

//WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */

/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
//WM_SetCreateFlags(WM_CF_MEMDEV);
/* USER CODE END WM_SetCreateFlags */
}



If you delete comments

WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */

/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
WM_SetCreateFlags(WM_CF_MEMDEV);



after this, the graphical interface stops running !!!

(Attention!  After deleting comments and compiling, turn off and turn on the power)

The problem is solved by adding a line



WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */

/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
HAL_LTDC_ProgramLineEvent(&hltdc, 0); //!!!!!!!!!!!!!!!!!!!!!!!
WM_SetCreateFlags(WM_CF_MEMDEV);
/* USER CODE END WM_SetCreateFlags */



And everything works fine!



P.S.

If FREERTOS is used, it is necessary to eliminate one more bug


in file  ..........STemWin\Target\STemwin_wrapper.c   comment

line (85):

//extern volatile GUI_TIMER_TIME OS_TimeMS;

line (876) :

//   OS_TimeMS++;