Ярлыки

_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)
Показаны сообщения с ярлыком EmWin. Показать все сообщения
Показаны сообщения с ярлыком EmWin. Показать все сообщения

вторник, 26 декабря 2017 г.

EmWin CreateDialogBox CreateWindow

Creates a dialog box.

WM_HWIN GUI_CreateDialogBox(const GUI_WIDGET_CREATE_INFO * paWidget,
int NumWidgets,
WM_CALLBACK * cb,
WM_HWIN hParent,
int x0,
int y0);

paWidget             Pointer to resource table defining the widgets to be included in the dialog.
NumWidgets       Total number of widgets included in the dialog.
cb                         Pointer to an application-specific callback function (dialog procedure).
hParent                 Handle of parent window (0 = no parent window).
x0                         X-position of the dialog relative to parent window.
y0                         Y-position of the dialog relative to parent window.


Creates a window of a specified size at a specified location.

WM_HWIN WM_CreateWindow(
int x0,
int y0,
int width,
int height,
U32 Style,
WM_CALLBACK * cb,
int NumExtraBytes);

x0                             Upper left X-position in desktop coordinates.
y0                             Upper left Y-position in desktop coordinates.
width                        X-size of window.
height                       Y-size of window.
Style                         Window create flags, listed below.
cb                             Pointer to callback routine, or NULL if no callback used.
NumExtraBytes       Number of extra bytes to be allocated, normally 0.

пятница, 4 августа 2017 г.

EmWin skins for buttons.

#include "DIALOG.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_WINDOW_0    (GUI_ID_USER + 0x00)
#define ID_BUTTON_0    (GUI_ID_USER + 0x01)
#define ID_BUTTON_1    (GUI_ID_USER + 0x02)
#define ID_BUTTON_2    (GUI_ID_USER + 0x03)
#define ID_BUTTON_3    (GUI_ID_USER + 0x04)

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 20, 10, 80, 20, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 20, 40, 80, 20, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 20, 70, 80, 20, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_3, 20, 100, 80, 20, 0, 0x0, 0 },
};

static BUTTON_SKINFLEX_PROPS _aProps[] = {
// BUTTON_SKINFLEX_PI_PRESSED
  {
    {GUI_RED, GUI_RED, GUI_DARKRED},
    {GUI_LIGHTRED, GUI_RED },
    {GUI_RED, GUI_DARKRED },
     3
  },
// BUTTON_SKINFLEX_PI_FOCUSSED
  {
    {GUI_DARKRED, GUI_RED, GUI_DARKGRAY},
    {GUI_LIGHTGRAY, GUI_GRAY },
    {GUI_GRAY, GUI_DARKGRAY },
     3
  },
// BUTTON_SKINFLEX_PI_ENABLED
  {
    {GUI_DARKRED, GUI_GRAY, GUI_DARKGRAY},
    {GUI_LIGHTGRAY, GUI_GRAY },
    {GUI_GRAY, GUI_DARKGRAY },
     3
  },
// BUTTON_SKINFLEX_PI_DISABLED
  {
    {0, 0, 0},
    {0, 0 },
    {0, 0 },
     3
  },
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _CustomSkin
*/
static int _CustomSkin(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
  int       Id;
  GUI_POINT aPoints[3];
  GUI_COLOR Color;
  BUTTON_SKINFLEX_PROPS aPropsOld[4];
  int i;

  switch (pDrawItemInfo->Cmd) {
  case WIDGET_ITEM_DRAW_BACKGROUND:
    Id = WM_GetId(pDrawItemInfo->hWin);
    switch (Id) {
    case ID_BUTTON_0:
      //
      // Draw an elliptic button
      //
      if (BUTTON_IsPressed(pDrawItemInfo->hWin)) {
        Color = GUI_YELLOW;
      } else {
        Color = GUI_RED;
      }
      GUI_SetColor(Color);
      GUI_FillEllipse(pDrawItemInfo->x1 / 2, pDrawItemInfo->y1 / 2, pDrawItemInfo->x1 / 2 - 1, pDrawItemInfo->y1 / 2 - 1);
      break;
    case ID_BUTTON_1:
      //
      // Draw a triangle button
      //
      aPoints[0].x = pDrawItemInfo->x1 / 2;
      aPoints[0].y = pDrawItemInfo->y0;
      aPoints[1].x = pDrawItemInfo->x1;
      aPoints[1].y = pDrawItemInfo->y1;
      aPoints[2].x = pDrawItemInfo->x0;
      aPoints[2].y = pDrawItemInfo->y1;
      if (BUTTON_IsPressed(pDrawItemInfo->hWin)) {
        Color = GUI_GREEN;
      } else {
        Color = GUI_CYAN;
      }
      GUI_SetColor(Color);
      GUI_FillPolygon(aPoints, GUI_COUNTOF(aPoints), pDrawItemInfo->x0, pDrawItemInfo->y0);
      break;
    case ID_BUTTON_2:
      //
      // Draw a standard button with different colors
      //
      for (i = 0; i < 4; i++) {
        BUTTON_GetSkinFlexProps(&aPropsOld[i], i);  // Get default properties
        BUTTON_SetSkinFlexProps(&_aProps[i], i);    // Set new properties
      }
      BUTTON_DrawSkinFlex(pDrawItemInfo);           // Draw button with new properties
      for (i = 0; i < 4; i++) {
        BUTTON_SetSkinFlexProps(&aPropsOld[i], i);  // Restore old properties to avoid other buttons will be drawn with this properties
      }
      break;
    case ID_BUTTON_3:
      BUTTON_DrawSkinFlex(pDrawItemInfo);
      break;
    }
    return 0;
  default:
    return BUTTON_DrawSkinFlex(pDrawItemInfo);
  }
}

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int     NCode;
  int     Id;

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetSkin(hItem, _CustomSkin);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetSkin(hItem, _CustomSkin);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    BUTTON_SetSkin(hItem, _CustomSkin);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
    BUTTON_SetSkin(hItem, _CustomSkin);
    break;
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/

WM_HWIN CreateWindow(void);
WM_HWIN CreateWindow(void) {
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
}

/*********************************************************************
*
*       MainTask
*/
//////////void MainTask(void) {
//////////  //
//////////  // Set flag for automatic use of memory devices. Calling before GUI_Init() makes sure the desktop window uses them, too.
//////////  //
//////////  WM_SetCreateFlags(WM_CF_MEMDEV);
//////////  //
//////////  // Initialize GUI
//////////  //
//////////  GUI_Init();
//////////  GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
//////////  while (1) {
//////////    GUI_Delay(100);
//////////  }
//////////}

суббота, 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);
}







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

EmWin JPEG

#include "GUI.h"

/*********************************************************************
*
*       MainTask
*/
void MainTask(void) {
  GUI_JPEG_INFO Info;
  int           XSize;
  int           YSize;
  int           XPos;
  int           YPos;

  GUI_Init();
  GUI_JPEG_GetInfo(_acJimenez_dragan, sizeof(_acJimenez_dragan), &Info);
  XSize = Info.XSize;
  YSize = Info.YSize;
  XPos = (XSize > 320) ?  0 : 160 - (XSize / 2);
  YPos = (YSize > 180) ? 60 : 150 - (YSize / 2);
  GUI_JPEG_Draw(_acJimenez_dragan, sizeof(_acJimenez_dragan), XPos, YPos);
  while (1) {
    GUI_Delay(100);
  }
}

среда, 12 апреля 2017 г.

GUIDRV_CompactColor_16.c & .h

/*********************************************************************
*                SEGGER MICROCONTROLLER GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 2003-2010     SEGGER Microcontroller GmbH & Co KG       *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

----------------------------------------------------------------------
File        : GUIDRV_CompactColor_16.h
Purpose     : Interface definition for GUIDRV_CompactColor_16 driver
---------------------------END-OF-HEADER------------------------------
*/

#ifndef GUIDRV_COMPACTCOLOR_16_H
#define GUIDRV_COMPACTCOLOR_16_H

/*********************************************************************
*
*       Display drivers
*/
//
// Addresses
//
extern const GUI_DEVICE_API GUIDRV_Win_API;

extern const GUI_DEVICE_API GUIDRV_CompactColor_16_API;

//
// Macros to be used in configuration files
//
#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)

  #define GUIDRV_COMPACT_COLOR_16 &GUIDRV_Win_API

#else

  #define GUIDRV_COMPACT_COLOR_16 &GUIDRV_CompactColor_16_API


#endif

#endif

/*************************** End of file ****************************/


GUIDRV_CompactColor_16.c


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