Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)
Показаны сообщения с ярлыком STemWin. Показать все сообщения
Показаны сообщения с ярлыком STemWin. Показать все сообщения

четверг, 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);
}
//}
}

суббота, 29 июля 2017 г.

LCDconf.c for STM32746G-Discovery problem

Original
#define COLOR_CONVERSION_0 GUICC_M8888I
#define DISPLAY_DRIVER_0   GUIDRV_LIN_32

Correct
#define COLOR_CONVERSION_0 GUICC_M888
#define DISPLAY_DRIVER_0   GUIDRV_LIN_24

Original
static inline U32 LCD_LL_GetPixelformat(U32 LayerIndex)
{
  if (LayerIndex == 0)
  {
    return LTDC_PIXEL_FORMAT_ARGB8888;
  } 
  else
  {
    return LTDC_PIXEL_FORMAT_ARGB1555;
  } 
}


Correct
static uint32_t LCD_LL_GetPixelformat(uint32_t LayerIndex)
{
  const LCD_API_COLOR_CONV * pColorConvAPI;

  if (LayerIndex >= GUI_NUM_LAYERS) 
  {
    return 0;
  }
  pColorConvAPI = layer_prop[LayerIndex].pColorConvAPI;
  
  if (pColorConvAPI == GUICC_M8888I) 
  {
    return LTDC_PIXEL_FORMAT_ARGB8888;
  } 
  else if (pColorConvAPI == GUICC_M888) 
  {
    return LTDC_PIXEL_FORMAT_RGB888;
  } 
  else if (pColorConvAPI == GUICC_M565) 
  {
    return LTDC_PIXEL_FORMAT_RGB565;
  } 
  else if (pColorConvAPI == GUICC_M1555I) 
  {
    return LTDC_PIXEL_FORMAT_ARGB1555;
  } 
  else if (pColorConvAPI == GUICC_M4444I) 
  {
    return LTDC_PIXEL_FORMAT_ARGB4444;
  } 
  else if (pColorConvAPI == GUICC_8666) 
  {
    return LTDC_PIXEL_FORMAT_L8;
  } 
  else if (pColorConvAPI == GUICC_1616I) 
  {
    return LTDC_PIXEL_FORMAT_AL44;
  } 
  else if (pColorConvAPI == GUICC_88666I) 
  {
    return LTDC_PIXEL_FORMAT_AL88;
  }
  while (1);
}







пятница, 9 июня 2017 г.

STM32 STemWin and Interrupt Problem

 I'm using STM32F407ZGT6 with SSD1963 LCD controller and 800x480 TFT panel. I'm not using OS. It's working with STemWin. 
 But when I used any interrupt, code execution stops at somewhere in emWin. 
 I moved WM_Exec() (GUI refresh function) to a timer interrupt routine and I disabled the interrupt before and enabled 
 the interrupt after emWin functions.
 The code is working in this form.
 
 //Main loop
     while(1)
     {
                _Disable_Timer_Interrupt
          GUI_EndDialog(hWin, 0);               //Delete GUI DIALOG
                _Enable_Timer_Interrupt


          HAL_Delay(500);
          
                _Disable_Timer_Interrupt
          hWin = CreateFramewin();          //Draw GUI DIALOG
                _Enable_Timer_Interrupt


          HAL_Delay(500);
     }
          
 //Timer Interrupt Routine          
 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
     {     
          if(htim->Instance == TIM13)     
          {
               HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_8);
               WM_Exec();
          }     
     }


 I added EXTI and the code didn't work again. enable-disable interrupt before-after didn't work in this time.
 I added FREETOS and problem didn't change. 
 When I used any interrupt, code execution stops at somewhere in emWin. 

I solved the problem. Problem caused by GUI_Delay() function.
I replaced GUI_X_GetTime(void) and GUI_X_Delay(int ms) functions in GUI_X.c with HAL tick timer functions.

Old form;
GUI_TIMER_TIME GUI_X_GetTime(void) { return OS_TimeMS; }
void GUI_X_Delay(int ms) { 
      int tEnd = OS_TimeMS + ms;
     while ((tEnd - OS_TimeMS) > 0);
}

The new form;
GUI_TIMER_TIME GUI_X_GetTime(void) { return HAL_GetTick();}
void GUI_X_Delay(int ms) { HAL_Delay(ms);}

Now I'm using Interrupts.

понедельник, 24 апреля 2017 г.

STM32F746NG Discovery RAM STemWin problem (add external SDRAM)

// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  (1024) *  150

U32 aMemory[GUI_NUMBYTES / 4];

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   available memory for the GUI.
*/
void GUI_X_Config(void) 
{
  //
  // Assign memory to STemWin
  //
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
}



// Define the available number of bytes available for the GUI
//
#define GUI_NUMBYTES  (1024) *  2048
#define GUI_BLOCKSIZE 0x80
//U32 aMemory[GUI_NUMBYTES / 4] __attribute__ ((section(".GUI_RAM")));

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   available memory for the GUI.
*/
void GUI_X_Config(void)
{
  //
  // Assign memory to STemWin
  //
static U32 *aMemory;
aMemory=(U32*)0xc0000000;//as GUI's RAM buffer
GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);

}





































or add comment to main module
//  CPU_CACHE_Enable();




четверг, 23 февраля 2017 г.

Example for emWin & STemWin

Example for emWin & STemWin

Keil_v523\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\MDK\Boards\ST\STM32F429I-Discovery\emWin

Example
GUIDemo



C:\Users\Admin\STM32Cube\Repository\STM32Cube_FW_F4_V1.14.0\Projects\STM32F429I-Discovery\Applications\STemWin

STemWin_HelloWorld
STemWin_SampleDemo




воскресенье, 19 февраля 2017 г.

GUI

Добавление STemWin в проект.

1 - из папки STemWin_Library_V1.2.0  ->   Library   ->   STemWinLibrary532  добавить файл              библиотеки      STemWin532_CM4_Keil.lib                   для проекта без RTOS
                               STemWin532_CM4_OS_Keil.lib            для RTOS

2 - из папки STemWin_Library_V1.2.0  ->   Library   ->   STemWinLibrary532  -> inc  добавить            все заголовочные h файлы. с прототипами функций из lib файла

- из папки STemWin_Library_V1.2.0  ->   Library   ->   STemWinLibrary532  -> Config добавить
     файлы конфигурации GUI
                   GUIConf.c
                   GUIConf.h
     и дисплея
     для дисплеев без контроллера LTDC (RGB)
                   LCDConf_Lin_Template.c
                   LCDConf_Lin_Template.h
     для дисплеев с контроллером
                   LCDConf_FlexColor_Template.c
                   LCDConf_FlexColor_Templateh

- из папки STemWin_Library_V1.2.0  ->   Library   ->   STemWinLibrary532  -> OS добавить
                   GUI_X.c                   для проекта без RTOS
                   GUI_X_OS.c            для RTOS

Для Keil библиотека emWin находится в папке
Keil -> ARM -> PACK -> Keil-Middleware  -> 7.4.0 -> emWin

The function GUI_Init() calls the functions (please make sure those functions to not cause the hard fault)

1 - GUI_X_Config()
2 - LCD_X_Config()
3 - LCD_X_DisplayDriver() -  которая вызывает при первом обращении процедуру настройки и инициализации дисплея
4 - GUI_X_Init



#if defined (STM32F429X)
#define GUI_NUMBYTES  (1024) *  96    // x KByte
#elif defined (STM32F40XX) || defined (STM32F2XX) || defined (STM32F10X_HD_VL)
#define GUI_NUMBYTES  (1024) *  512   // x KByte
#elif defined (STM32F10X_HD)
#define GUI_NUMBYTES  (1024) *  53   // x KByte
#elif defined (STM32F10X_MD)
#define GUI_NUMBYTES  (1024) *  10   // x KByte
#elif defined (STM32F10X_MD_VL) || defined (STM32F0XX)
#define GUI_NUMBYTES  (1024) *  3   // x KByte
#elif defined (STM32F30X)
#define GUI_NUMBYTES  (1024) *  25   // x KByte
#elif defined (STM32F37X)
#define GUI_NUMBYTES  (1024) *  22   // x KByte
#elif defined (STM32L1XX_HD)
#define GUI_NUMBYTES  (1024) *  35   // x KByte
#elif defined (STM32L1XX_MD)
#define GUI_NUMBYTES  (1024) *  6   // x KByte
#else
#define GUI_NUMBYTES  (1024) *  40   // x KByte
#endif


 GUIConf.h

/* 32 bit aligned memory area */
U32 extMem[GUI_NUMBYTES / 4];

Для размещения рабочего буфера STemWin адресам SDRAM

/* 32 bit aligned memory area */
#ifdef __ICCARM__
#pragma location=0x68000000
static __no_init U32 extMem[GUI_NUMBYTES / 4];
#elif defined (__CC_ARM)
static U32 extMem[GUI_NUMBYTES / 4] __attribute__((at(0x68000000)));
#elif defined (__GNUC__)
static U32 extMem[GUI_NUMBYTES / 4] __attribute__((section(".ExtRAMData")));
#endif   

Есть в демо STemWin

Адрес подставить, где размещена SDRAM



суббота, 10 декабря 2016 г.

STemWin connection to project (example for STM32F429 for Keil project)

https://github.com/golf2109/STM32F429ZI_SSD1963_FT5336/

 Add STemWin library to project/
Download from st.com STemWin library packet (exapmle STemWin_Library_V1.2.0).
Package content
This version of the STemWin Library package contains the following sub folders:
Config: contains configuration files for the library and LCD drivers
Documentation: contains emWin "User & Reference Guide"
inc: contains header files of the library components
Lib: contains the Library GUI in object format (.a and .lib), running on all STM32 devices based on CortexM0, CortexM3, CortexM4F or CortexM7 cores, all with and without OS support. The naming format is STemWinv_CMx_YY_C_ot.a, where
v: STemWin version (ex. v=522)
x : the CMx core class (CM0, CM3, CM4 or CM7)
YY: OS support

C: compiler (IAR, Keil, GCC)
ot: binary generated with high speed optimization
OS: contains library interface with RTOS
Simulation: contains system resources for WIN32 in precompiled library format

Software: contains software tools (Bitmap Converter, Font Converter, GUIBuilder, JPEG2Movie and emVNC)

Add to project folder EmWin and copy file STemWin532_CM4_Keil.lib from \STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\Lib to this folder.

Copy folder inc from \STemWin_Library_V1.2.0\Libraries\STemWinLibrary532 to the project.
 Add config file from \STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\Config fo folder EmWin in project
GUIConf.c
GUIConf.h
LCDConf_FlexColor_Template.c
LCDConf_FlexColor_Template.h
Rename LCDConf_FlexColor_Template.c  &  LCDConf_FlexColor_Template.h  to LCDConf_FlexColor.c  &  LCDConf_FlexColor.h.
Add file \STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\OS\GUI_X.c to the project


Add include patch in Option for target for EmWin folder & EmWin\inc subfolder. Delete read only attribute from files GUI_X.c, GUIConf.c, LCDConf_Flex_color.c (example for GUI_X.c)


Add #include GUI.h to main.c. Add init procedure   GUI_Init(); to main.c. In file GUIConf.c decrease memory for GUI from 0x200000:
to 0x20000:
Compile project. All must be OK.


In the file LCDConf_Flex_color.c set for our display size set


Add in fincshion LcdWriteReg, LcdWriteData, LcdWriteMultiple,  LcdReadMultiple  add command for our display connection:


In function LCD_X_Config rename driver for our display:


In main.c before string GUI_Init();  add string 
  __HAL_RCC_CRC_CLK_ENABLE();  

In file stm32f4xx_it.c add string 
extern volatile uint32_t OS_TimeMS;

in SysTick_Handler() add 
OS_TimeMS++;


суббота, 13 сентября 2014 г.

STemWin для STM32F10x и ILI9320, ILI9325

STemWin поставляется с примерами для различных макетных плат ST, но без драйверов для дисплеев. В её состав входит только шаблон драйвера GUIDRV_Template.c в самом конце которого находится структура API

const GUI_DEVICE_API GUIDRV_Template_API = {
  //
  // Data
  //
  DEVICE_CLASS_DRIVER,
  //
  // Drawing functions
  //
  _DrawBitmap,
  _DrawHLine,
  _DrawVLine,
  _FillRect,
  _GetPixelIndex,
  _SetPixelIndex,
  _XorPixel,
  //
  // Set origin
  //
  _SetOrg,
  //
  // Request information
  //
  _GetDevFunc,
  _GetDevProp,
  _GetDevData,
  _GetRect,
};

Из документации можно выяснить, что из всех функций нам необходимо адаптировать под наш дисплей только  _GetPixelIndex и  _SetPixelIndex. В функцию _SetPixelIndex нам необходимо вставить процедуру установки пиксель для нашего дисплея в месте которое нам предусмотрительно оставлено

    GUI_USE_PARA(pDevice);
    GUI_USE_PARA(x);
    GUI_USE_PARA(y);
    GUI_USE_PARA(PixelIndex);
    {
      //
      // Write into hardware ... Adapt to your system
      //
      // TBD by customer...
      //
    }

  //if ( (x>240)||(y>320) ) return;
  //LCD_WR_CMD(0,0x02,x);
  //LCD_WR_CMD(1,0x03,y);  
  
  LCD_WR_CMD(32, y);
  LCD_WR_CMD(33, 319-x);
  //*(__IO uint16_t *) (Bank1_LCD_C)= 34;
  LCD_WR_REG(34);

  //LCD_WR_CMD(0,0x02,y);
  //LCD_WR_CMD(1,0x03,319-x);  
  //LCD_WR_REG(0x0E); 
  LCD_WR_Data(point);  

Для _GetPixelIndex необходимо вставить

  u16 temp;
  ili9320_SetCursor(x,y);
  LCD_WR_REG(34);
  //temp = ili9320_ReadData(); //dummy
  //temp = ili9320_ReadData();

  //  return (ili9320_BGR2RGB(ili9320_ReadData()));
  return (ili9320_ReadData());

Для того, чтобы emWin использовала этот модифицированный драйвер необходимо в файле  LCDConf.c  в процедуре LCD_X_Config вставить

//
// Physical display size
//
#define XSIZE_PHYS  240
#define YSIZE_PHYS  400
....
void LCD_X_Config(void)
{
    ....
    pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_Template_API, GUICC_565, 0, 0);
    ....
}
....
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
{
    ....
    switch (Cmd)
    {
        case LCD_X_INITCONTROLLER:
        {
            lcdInit();
            return 0;
        }
        ....
    }
    ....
}