6417|10

1903

帖子

0

TA的资源

版主

楼主
 

stm32f429移植uGUI [复制链接]

 
本帖最后由 star_66666 于 2018-1-10 12:39 编辑

       昨天在某个论坛发现一个新的GUI,很小巧,心就痒痒了,想试试,目前官方版本是v0.3,官方网站也只提供了f429的demo,但是因本人见识较少,不知道那工程是什么后缀STM32F429.coproj,无奈,就就自己移植一下玩玩了,权当娱乐了。       下班回到家,把f429的discover板子找了出来,已经放了3年了,竟然还能亮起来,很兴奋啊。又从网上找了个discover的例程能点亮ltdc的。万事具备了。
先把GUI介绍一下,
What is μGUI
μGUI is a free and open source graphic library for embedded systems. It is platform-independent and can be easily ported to almost any microcontroller system. As long as the display is capable of showing graphics, μGUI is not restricted to a certain display technology. Therefore, display technologies such as LCD, TFT, E-Paper, LED or OLED are supported. The whole module consists of two files: ugui.c and ugui.h.
μGUI Features
  • μGUI supports any color, grayscale or monochrome display
  • μGUI supports any display resolution
  • μGUI supports multiple different displays
  • μGUI supports any touch screen technology (e.g. AR, PCAP)
  • μGUI supports windows and objects (e.g. button, textbox)
  • 16 different fonts available
  • integrated and free scalable system console
  • basic geometric functions (e.g. line, circle, frame etc.)
  • can be easily ported to almost any microcontroller system
  • no risky dynamic memory allocation required
μGUI Requirements
μGUI is platform-independent, so there is no need to use a certain embedded
system. In order to use μGUI, only two requirements are necessary:
  • a C-function which is able to control pixels of the target display.
  • integer types for the target platform have to be adjusted in ugui.h.
这是从官方论坛拷贝的。大家自己看。
一大早睡不着了,就起来开始移植,花了近2小时,终于移植成功了,当然还没有完成触摸的移植。下面开始汇报一下。
找了个非常干净的例程,里面除了驱动,就是ADC例程,直接删除即可开始移植了。
先上个图看看。


把官方例程的

这几个文件拷贝过来,放到一个文件夹里。把官方例程里的system.h头文件换成例程的Com.h,当然头文件里要增加上图4个c文件的头文件即可。解决几个小的错误,把delay.c里的初始化直接删除,然后在main.c文件中清除些之前工程的函数及变量等,把官方例程main.c文件中的函数,及相关代码拷贝过来即可。需要拷贝的有
  1. /* GUI structure */
  2. UG_GUI gui;

  3. /* Touch structure */
  4. //static TP_STATE* TP_State;

  5. /* Some defines */
  6. #define MAX_OBJECTS        10
  7. #define TOGGLE_GREEN_LED   GPIO_ToggleBits(GPIOG,GPIO_Pin_13);
  8. #define TOGGLE_RED_LED     GPIO_ToggleBits(GPIOG,GPIO_Pin_14);

  9. /* Window 1 */
  10. UG_WINDOW window_1;
  11. UG_OBJECT obj_buff_wnd_1[MAX_OBJECTS];
  12. UG_BUTTON button1_1;
  13. UG_BUTTON button1_2;
  14. UG_BUTTON button1_3;
  15. UG_BUTTON button1_4;
  16. UG_BUTTON button1_5;
  17. UG_BUTTON button1_6;

  18. /* Window 2 */
  19. UG_WINDOW window_2;
  20. UG_OBJECT obj_buff_wnd_2[MAX_OBJECTS];
  21. UG_BUTTON button2_1;
  22. UG_TEXTBOX textbox2_1;
  23. UG_TEXTBOX textbox2_2;
  24. UG_IMAGE image2_1;

  25. /* Window 3 */
  26. UG_WINDOW window_3;
  27. UG_OBJECT obj_buff_wnd_3[MAX_OBJECTS];
  28. UG_BUTTON button3_1;
  29. UG_TEXTBOX textbox3_1;

  30. /* FSM */
  31. #define STATE_MAIN_MENU                0
  32. #define STATE_BENCHMARK_RUN            1
  33. #define STATE_BENCHMARK_RESULT         2
  34. volatile UG_U32 state;
  35. volatile UG_U32 next_state;

  36. /* Benchmark */
  37. volatile UG_U32 timer;
  38. volatile UG_U32 hw_acc = 1;
  39. char result_str[30];
  40. UG_S16 xs,ys;
  41. UG_S16 xe,ye;
  42. UG_COLOR c;

  43. extern u32 ltdc_work_layer;

  44. /* Hardware accelerator for UG_DrawLine (Platform: STM32F4x9) */
  45. UG_RESULT _HW_DrawLine( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c )
  46. {
  47.    DMA2D_InitTypeDef DMA2D_InitStruct;

  48.    RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2D, ENABLE);
  49.    RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2D, DISABLE);
  50.    DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;
  51.    DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565;
  52.    /* Convert UG_COLOR to RGB565 */
  53.    DMA2D_InitStruct.DMA2D_OutputBlue = (c>>3) & 0x1F;
  54.    DMA2D_InitStruct.DMA2D_OutputGreen = (c>>10) & 0x3F;
  55.    DMA2D_InitStruct.DMA2D_OutputRed = (c>>19) & 0x1F;
  56.    DMA2D_InitStruct.DMA2D_OutputAlpha = 0x0F;

  57.    /* horizontal line */
  58.    if ( y1 == y2 )
  59.    {
  60.       DMA2D_InitStruct.DMA2D_OutputOffset = 0;
  61.       DMA2D_InitStruct.DMA2D_NumberOfLine = 1;
  62.       DMA2D_InitStruct.DMA2D_PixelPerLine = x2-x1+1;
  63.    }
  64.    /* vertical line */
  65.    else if ( x1 == x2 )
  66.    {
  67.       DMA2D_InitStruct.DMA2D_OutputOffset = LCD_PIXEL_WIDTH - 1;
  68.       DMA2D_InitStruct.DMA2D_NumberOfLine = y2-y1+1;
  69.       DMA2D_InitStruct.DMA2D_PixelPerLine = 1;
  70.    }
  71.    else
  72.    {
  73.       return UG_RESULT_FAIL;
  74.    }

  75.    if ( ltdc_work_layer == LAYER_1 )
  76.    {
  77.       DMA2D_InitStruct.DMA2D_OutputMemoryAdd = SDRAM_BANK_ADDR + LAYER_1_OFFSET + 2*(LCD_PIXEL_WIDTH * y1 + x1);
  78.    }
  79.    else
  80.    {
  81.       DMA2D_InitStruct.DMA2D_OutputMemoryAdd = SDRAM_BANK_ADDR + LAYER_2_OFFSET + 2*(LCD_PIXEL_WIDTH * y1 + x1);
  82.    }
  83.    DMA2D_Init(&DMA2D_InitStruct);
  84.    DMA2D_StartTransfer();
  85.    while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET){};
  86.    return UG_RESULT_OK;
  87. }

  88. /* Hardware accelerator for UG_FillFrame (Platform: STM32F4x9) */
  89. UG_RESULT _HW_FillFrame( UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c )
  90. {
  91.    DMA2D_InitTypeDef      DMA2D_InitStruct;

  92.    DMA2D_DeInit();
  93.    DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;
  94.    DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565;
  95.    /* Convert UG_COLOR to RGB565 */
  96.    DMA2D_InitStruct.DMA2D_OutputBlue = (c>>3) & 0x1F;
  97.    DMA2D_InitStruct.DMA2D_OutputGreen = (c>>10) & 0x3F;
  98.    DMA2D_InitStruct.DMA2D_OutputRed = (c>>19) & 0x1F;
  99.    DMA2D_InitStruct.DMA2D_OutputAlpha = 0x0F;
  100.    DMA2D_InitStruct.DMA2D_OutputOffset = (LCD_PIXEL_WIDTH - (x2-x1+1));
  101.    DMA2D_InitStruct.DMA2D_NumberOfLine = y2-y1+1;
  102.    DMA2D_InitStruct.DMA2D_PixelPerLine = x2-x1+1;
  103.    if ( ltdc_work_layer == LAYER_1 )
  104.    {
  105.       DMA2D_InitStruct.DMA2D_OutputMemoryAdd = SDRAM_BANK_ADDR + LAYER_1_OFFSET + 2*(LCD_PIXEL_WIDTH * y1 + x1);
  106.    }
  107.    else
  108.    {
  109.       DMA2D_InitStruct.DMA2D_OutputMemoryAdd = SDRAM_BANK_ADDR + LAYER_2_OFFSET + 2*(LCD_PIXEL_WIDTH * y1 + x1);
  110.    }
  111.    DMA2D_Init(&DMA2D_InitStruct);

  112.    DMA2D_StartTransfer();
  113.    while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET){}
  114.    return UG_RESULT_OK;
  115. }

  116. /* Systick interrupt */
  117. void SysTick_Handler(void)
  118. {
  119.    if ( timer ) timer--;

  120.    if ( state == STATE_MAIN_MENU )
  121.    {
  122. //      TP_State = IOE_TP_GetState();
  123. //      if( TP_State->TouchDetected )
  124. //      {
  125. //         if ( (TP_State->X > 0) && (TP_State->X < 239 ) )
  126. //         {
  127. //            if ( (TP_State->Y > 0) && (TP_State->Y < 319 ) )
  128. //            {
  129. //               UG_TouchUpdate(TP_State->X,TP_State->Y,TOUCH_STATE_PRESSED);
  130. //            }
  131. //         }
  132. //      }
  133. //      else
  134. //      {
  135. //         UG_TouchUpdate(-1,-1,TOUCH_STATE_RELEASED);
  136. //      }
  137.    }

  138.    UG_Update();
  139. }

  140. void led_init(void)
  141. {
  142.    GPIO_InitTypeDef GPIO_InitStructure;

  143.    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
  144.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
  145.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  146.    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  147.    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  148.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  149.    GPIO_Init(GPIOG, &GPIO_InitStructure);

  150.    GPIO_ToggleBits(GPIOG,GPIO_Pin_14);
  151. }

  152. void systick_init( void )
  153. {
  154.    /* Init SysTick (100Hz) */
  155.    SystemCoreClockUpdate();
  156.    if (SysTick_Config(SystemCoreClock / 100))
  157.    {
  158.       /* Capture error */
  159.       while (1);
  160.    }
  161. }

  162. /* Callback function for the main menu */
  163. void window_1_callback( UG_MESSAGE* msg )
  164. {
  165.    if ( msg->type == MSG_TYPE_OBJECT )
  166.    {
  167.       if ( msg->id == OBJ_TYPE_BUTTON )
  168.       {
  169.          switch( msg->sub_id )
  170.          {
  171.             case BTN_ID_0: /* Toggle green LED */
  172.             {
  173.                TOGGLE_GREEN_LED;
  174.                break;
  175.             }
  176.             case BTN_ID_1: /* Toggle red LED */
  177.             {
  178.                TOGGLE_RED_LED;
  179.                break;
  180.             }
  181.             case BTN_ID_2: /* Show ?UI info */
  182.             {
  183.                UG_WindowShow( &window_2 );
  184.                break;
  185.             }
  186.             case BTN_ID_3: /* Toggle hardware acceleration */
  187.             {
  188.                if ( !hw_acc )
  189.                {
  190.                   UG_ButtonSetForeColor( &window_1, BTN_ID_3, C_RED );
  191.                   UG_ButtonSetText( &window_1, BTN_ID_3, "HW_ACC\nOFF" );
  192.                   UG_DriverEnable( DRIVER_DRAW_LINE );
  193.                   UG_DriverEnable( DRIVER_FILL_FRAME );
  194.                }
  195.                else
  196.                {
  197.                   UG_ButtonSetForeColor( &window_1, BTN_ID_3, C_BLUE );
  198.                   UG_ButtonSetText( &window_1, BTN_ID_3, "HW_ACC\nON" );
  199.                   UG_DriverDisable( DRIVER_DRAW_LINE );
  200.                   UG_DriverDisable( DRIVER_FILL_FRAME );
  201.                }
  202.                hw_acc = !hw_acc;
  203.                break;
  204.             }
  205.             case BTN_ID_4: /* Start benchmark */
  206.             {
  207.                next_state = STATE_BENCHMARK_RUN;
  208.                break;
  209.             }
  210.             case BTN_ID_5: /* Resize window */
  211.             {
  212.                static UG_U32 tog;

  213.                if ( !tog )
  214.                {
  215.                   UG_WindowResize( &window_1, 0, 40, 239, 319-40 );
  216.                }
  217.                else
  218.                {
  219.                   UG_WindowResize( &window_1, 0, 0, 239, 319 );
  220.                }
  221.                tog = ! tog;
  222.                break;
  223.             }
  224.          }
  225.       }
  226.    }
  227. }

  228. /* Callback function for the info window */
  229. void window_2_callback( UG_MESSAGE* msg )
  230. {
  231.    if ( msg->type == MSG_TYPE_OBJECT )
  232.    {
  233.       if ( msg->id == OBJ_TYPE_BUTTON )
  234.       {
  235.          switch( msg->sub_id )
  236.          {
  237.             case BTN_ID_0:
  238.             {
  239.                UG_WindowHide( &window_2 );
  240.                break;
  241.             }
  242.          }
  243.       }
  244.    }
  245. }

  246. /* Callback function for the result window */
  247. void window_3_callback( UG_MESSAGE* msg )
  248. {
  249.    if ( msg->type == MSG_TYPE_OBJECT )
  250.    {
  251.       if ( msg->id == OBJ_TYPE_BUTTON )
  252.       {
  253.          switch( msg->sub_id )
  254.          {
  255.             /* OK button */
  256.             case BTN_ID_0:
  257.             {
  258.                UG_WindowShow( &window_1 );
  259.                break;
  260.             }
  261.          }
  262.       }
  263.    }
  264. }

  265. /* better rand() function */
  266. UG_U32 randx( void )
  267. {
  268.    static UG_U32 z1 = 12345, z2 = 12345, z3 = 12345, z4 = 12345;
  269.    UG_U32 b;
  270.    b  = ((z1 << 6) ^ z1) >> 13;
  271.    z1 = ((z1 & 4294967294U) << 18) ^ b;
  272.    b  = ((z2 << 2) ^ z2) >> 27;
  273.    z2 = ((z2 & 4294967288U) << 2) ^ b;
  274.    b  = ((z3 << 13) ^ z3) >> 21;
  275.    z3 = ((z3 & 4294967280U) << 7) ^ b;
  276.    b  = ((z4 << 3) ^ z4) >> 12;
  277.    z4 = ((z4 & 4294967168U) << 13) ^ b;
  278.    return (z1 ^ z2 ^ z3 ^ z4);
  279. }
复制代码


int main(void)里面需要拷贝的有
  1. /* Init ?UI */
  2.    UG_Init(&gui,(void(*)(UG_S16,UG_S16,UG_COLOR))pset,240,320);

  3.    /* Init Touch */
  4. //   IOE_Config();

  5.    /* Register hardware acceleration */
  6.    UG_DriverRegister( DRIVER_DRAW_LINE, (void*)_HW_DrawLine );
  7.    UG_DriverRegister( DRIVER_FILL_FRAME, (void*)_HW_FillFrame );
  8.    UG_DriverEnable( DRIVER_DRAW_LINE );
  9.    UG_DriverEnable( DRIVER_FILL_FRAME );

  10.    /* Init SysTick (100Hz) */
  11.    systick_init();

  12.    /* Clear Screen */
  13.    ltdc_draw_layer(LAYER_1);
  14.    ltdc_show_layer(LAYER_1);
  15.    UG_FillScreen( C_BLACK );

  16.    /* Create Window 1 */
  17.    UG_WindowCreate( &window_1, obj_buff_wnd_1, MAX_OBJECTS, window_1_callback );
  18.    UG_WindowSetTitleText( &window_1, "?UI [url=home.php?mod=space&uid=775551]@[/url] STM32F429" );
  19.    UG_WindowSetTitleTextFont( &window_1, &FONT_12X20 );

  20.    /* Create some Buttons */
  21.    UG_ButtonCreate( &window_1, &button1_1, BTN_ID_0, 10, 10, 110, 60 );
  22.    UG_ButtonCreate( &window_1, &button1_2, BTN_ID_1, 10, 80, 110, 130 );
  23.    UG_ButtonCreate( &window_1, &button1_3, BTN_ID_2, 10, 150, 110,200 );
  24.    UG_ButtonCreate( &window_1, &button1_4, BTN_ID_3, 120, 10, UG_WindowGetInnerWidth( &window_1 ) - 10 , 60 );
  25.    UG_ButtonCreate( &window_1, &button1_5, BTN_ID_4, 120, 80, UG_WindowGetInnerWidth( &window_1 ) - 10, 130 );
  26.    UG_ButtonCreate( &window_1, &button1_6, BTN_ID_5, 120, 150, UG_WindowGetInnerWidth( &window_1 ) - 10, 200 );

  27.    /* Configure Button 1 */
  28.    UG_ButtonSetFont( &window_1, BTN_ID_0, &FONT_12X20 );
  29.    UG_ButtonSetBackColor( &window_1, BTN_ID_0, C_LIME );
  30.    UG_ButtonSetText( &window_1, BTN_ID_0, "Green\nLED" );
  31.    /* Configure Button 2 */
  32.    UG_ButtonSetFont( &window_1, BTN_ID_1, &FONT_12X20 );
  33.    UG_ButtonSetBackColor( &window_1, BTN_ID_1, C_RED );
  34.    UG_ButtonSetText( &window_1, BTN_ID_1, "Red\nLED" );
  35.    /* Configure Button 3 */
  36.    UG_ButtonSetFont( &window_1, BTN_ID_2, &FONT_12X20 );
  37.    UG_ButtonSetText( &window_1, BTN_ID_2, "About\n?UI" );
  38.    UG_WindowShow( &window_1 );
  39.    /* Configure Button 4 */
  40.    UG_ButtonSetFont( &window_1, BTN_ID_3, &FONT_12X20 );
  41.    UG_ButtonSetForeColor( &window_1, BTN_ID_3, C_RED );
  42.    UG_ButtonSetText( &window_1, BTN_ID_3, "HW_ACC\nOFF" );
  43.    /* Configure Button 5 */
  44.    UG_ButtonSetFont( &window_1, BTN_ID_4, &FONT_8X14 );
  45.    UG_ButtonSetText( &window_1, BTN_ID_4, "Start\nBenchmark" );
  46.    /* Configure Button 6 */
  47.    UG_ButtonSetFont( &window_1, BTN_ID_5, &FONT_10X16 );
  48.    UG_ButtonSetText( &window_1, BTN_ID_5, "Resize\nWindow" );

  49.    /* -------------------------------------------------------------------------------- */
  50.    /* Create Window 2 (?UI Info)                                                      */
  51.    /* -------------------------------------------------------------------------------- */
  52.    UG_WindowCreate( &window_2, obj_buff_wnd_2, MAX_OBJECTS, window_2_callback );
  53.    UG_WindowSetTitleText( &window_2, "Info" );
  54.    UG_WindowSetTitleTextFont( &window_2, &FONT_12X20 );
  55.    UG_WindowResize( &window_2, 20, 40, 219, 279 );

  56.    /* Create Button 1 */
  57.    UG_ButtonCreate( &window_2, &button2_1, BTN_ID_0, 40, 150, UG_WindowGetInnerWidth( &window_2 )-40, 200 );
  58.    UG_ButtonSetFont( &window_2, BTN_ID_0, &FONT_22X36 );
  59.    UG_ButtonSetText( &window_2, BTN_ID_0, "OK!" );

  60.    /* Create Textbox 1 */
  61.    UG_TextboxCreate( &window_2, &textbox2_1, TXB_ID_0, 10, 10, UG_WindowGetInnerWidth( &window_2 )-10, 40 );
  62.    UG_TextboxSetFont( &window_2, TXB_ID_0, &FONT_16X26 );
  63.    UG_TextboxSetText( &window_2, TXB_ID_0, "?UI v0.3" );
  64.    UG_TextboxSetAlignment( &window_2, TXB_ID_0, ALIGN_TOP_CENTER );

  65.    /* Create Textbox 2 */
  66.    UG_TextboxCreate( &window_2, &textbox2_2, TXB_ID_1, 10, 125, UG_WindowGetInnerWidth( &window_2 )-10, 135 );
  67.    UG_TextboxSetFont( &window_2, TXB_ID_1, &FONT_6X8 );
  68.    UG_TextboxSetText( &window_2, TXB_ID_1, "www.embeddedlightning.com" );
  69.    UG_TextboxSetAlignment( &window_2, TXB_ID_1, ALIGN_BOTTOM_CENTER );
  70.    UG_TextboxSetForeColor( &window_2, TXB_ID_1, C_BLUE );
  71.    UG_TextboxSetHSpace( &window_2, TXB_ID_1, 1 );

  72.    /* Create Image 1 */
  73.    UG_ImageCreate( &window_2, &image2_1, IMG_ID_0, (UG_WindowGetInnerWidth( &window_2 )>>1) - (logo.width>>1), 40, 0, 0 );
  74.    UG_ImageSetBMP( &window_2, IMG_ID_0, &logo );

  75.    /* -------------------------------------------------------------------------------- */
  76.    /* Create Window 3 (Benchmark Result)                                               */
  77.    /* -------------------------------------------------------------------------------- */
  78.    UG_WindowCreate( &window_3, obj_buff_wnd_3, MAX_OBJECTS, window_3_callback );
  79.    UG_WindowSetTitleText( &window_3, "Benchmark Result" );
  80.    UG_WindowSetTitleTextFont( &window_3, &FONT_10X16 );
  81.    UG_WindowResize( &window_3, 20, 90, 219, 230 );

  82.    /* Create Textbox 1 */
  83.    UG_TextboxCreate( &window_3, &textbox3_1, TXB_ID_0, 5, 10, UG_WindowGetInnerWidth( &window_3 )-5, 60 );
  84.    UG_TextboxSetFont( &window_3, TXB_ID_0, &FONT_12X20 );
  85.    UG_TextboxSetText( &window_3, TXB_ID_0, "Result:\n99999 frm/sec" );
  86.    UG_TextboxSetAlignment( &window_3, TXB_ID_0, ALIGN_TOP_CENTER );

  87.    /* Create Button 1 */
  88.    UG_ButtonCreate( &window_3, &button3_1, BTN_ID_0, 40, 65, UG_WindowGetInnerWidth( &window_3 )-40, 100 );
  89.    UG_ButtonSetFont( &window_3, BTN_ID_0, &FONT_12X16 );
  90.    UG_ButtonSetText( &window_3, BTN_ID_0, "OK!" );

  91.    /* -------------------------------------------------------------------------------- */
  92.    /* Start demo application                                                           */
  93.    /* -------------------------------------------------------------------------------- */
  94.    /* Show Window 1 */
  95.    UG_WindowShow( &window_1 );
  96.    UG_WaitForUpdate();

  97.    /* Initialize FSM */
  98.    next_state = STATE_MAIN_MENU;
  99.    state = !STATE_MAIN_MENU;

  100.         while(1)
  101.         {   
  102.     static int frm_cnt;

  103.       /* Do we change the state? */
  104.       if ( next_state != state )
  105.       {
  106.          /* Initialize the next state */
  107.          switch ( next_state )
  108.          {
  109.             case STATE_MAIN_MENU:
  110.             {
  111.                /* Nothing to do */
  112.                break;
  113.             }
  114.             case STATE_BENCHMARK_RUN:
  115.             {
  116.                /* Clear layer 2 */
  117.                ltdc_draw_layer( LAYER_2 );
  118.                UG_FillScreen( C_BLACK );

  119.                /* Fade to layer 2 */
  120.                ltdc_fade_to_layer( LAYER_2 );

  121.                /* Reset the frame counter */
  122.                frm_cnt = 0;

  123.                /* Run benchmark for 5 seconds */
  124.                timer = 500;
  125.                break;
  126.             }
  127.             case STATE_BENCHMARK_RESULT:
  128.             {
  129.                /* Nothing to do */
  130.                break;
  131.             }
  132.          }
  133.          state = next_state;
  134.       }

  135.       /* FSM */
  136.       switch ( state )
  137.       {
  138.          /* Run the benchmark */
  139.          case STATE_BENCHMARK_RUN:
  140.          {
  141.             xs = randx() % 240;
  142.             xe = randx() % 240;
  143.             ys = randx() % 320;
  144.             ye = randx() % 320;
  145.             c = randx() % 0xFFFFFF;
  146.             UG_FillFrame( xs, ys, xe, ye, c );
  147.             frm_cnt++;

  148.             if ( !timer ) next_state = STATE_BENCHMARK_RESULT;
  149.             break;
  150.          }
  151.          /* Show benchmark result */
  152.          case STATE_BENCHMARK_RESULT:
  153.          {
  154.             sprintf( result_str, "Result:\n%u frm/sec", frm_cnt/5 );
  155.             UG_TextboxSetText( &window_3, TXB_ID_0, result_str );

  156.             /* Fade to layer 1 */
  157.             ltdc_draw_layer( LAYER_1 );
  158.             ltdc_fade_to_layer( LAYER_1 );

  159.             /* Show benchmark result */
  160.             UG_WindowShow( &window_3 );

  161.             next_state = STATE_MAIN_MENU;
  162.             break;
  163.          }
  164.          case STATE_MAIN_MENU:
  165.          {
  166.             /* Let ?UI do the job! */
  167.             break;
  168.          }
  169.       }
  170.         }
复制代码

拷贝完成,按照我提供的代码更改一下,就可以编译运行了。
后面有时间继续深入研究一下。
补一张工程的界面图,和工程文件

                                                                                      发稿与2018年1月10日
此内容由EEWORLD论坛网友star_66666原创,如需转载或用于商业用途需征得作者同意并注明出处



uGUI移植.zip

7.13 MB, 下载次数: 19

售价: 10 分芯积分  [记录]

此帖出自stm32/stm8论坛

最新回复

不知道这个GUI适不适合单色的OLED  详情 回复 发表于 2018-8-14 10:19
点赞 关注(1)
 

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
这个gui很不错,众多历程,支持众多屏幕驱动。

但是楼主不上个图真的好么^_^
此帖出自stm32/stm8论坛

点评

不是已经上图了吗?你是想要工程文件?不是要图哦。满足你,给你工程,其实按照我的讲解,完全可以自己试试的,我就是喜欢自己试试。  详情 回复 发表于 2018-1-10 12:36
 
 

回复

1903

帖子

0

TA的资源

版主

板凳
 
shower.xu 发表于 2018-1-10 11:28
这个gui很不错,众多历程,支持众多屏幕驱动。

但是楼主不上个图真的好么^_^

不是已经上图了吗?你是想要工程文件?不是要图哦。满足你,给你工程,其实按照我的讲解,完全可以自己试试的,我就是喜欢自己试试。
此帖出自stm32/stm8论坛

点评

抱歉网络慢,才看到图。 这个之前看过,谢谢  详情 回复 发表于 2018-1-10 13:20
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

4
 
star_66666 发表于 2018-1-10 12:36
不是已经上图了吗?你是想要工程文件?不是要图哦。满足你,给你工程,其实按照我的讲解,完全可以自己试 ...

抱歉网络慢,才看到图。

这个之前看过,谢谢
此帖出自stm32/stm8论坛

点评

客气了,我昨天刚看到这个GUI,从网上找参考也没有,就自己搞了下,没想到很顺利的。  详情 回复 发表于 2018-1-10 13:36
 
 
 

回复

1903

帖子

0

TA的资源

版主

5
 
shower.xu 发表于 2018-1-10 13:20
抱歉网络慢,才看到图。

这个之前看过,谢谢

客气了,我昨天刚看到这个GUI,从网上找参考也没有,就自己搞了下,没想到很顺利的。
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

6
 
没认真看标题,第一反应是uCGUI
此帖出自stm32/stm8论坛

点评

是吧,这个GUI很小巧,你可以自己也研究一下,我还没有深入研究,目前就是移植成功了  详情 回复 发表于 2018-1-11 15:36
 
 
 

回复

1903

帖子

0

TA的资源

版主

7
 
1428662475 发表于 2018-1-11 14:53
没认真看标题,第一反应是uCGUI

是吧,这个GUI很小巧,你可以自己也研究一下,我还没有深入研究,目前就是移植成功了
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

8
 
看上去很不错,能问下支持汉字和菜单么????
此帖出自stm32/stm8论坛

点评

目前我还没有深入研究,不能回答你,有时间我看看,  详情 回复 发表于 2018-1-15 09:50
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1903

帖子

0

TA的资源

版主

9
 
ddllxxrr 发表于 2018-1-15 09:18
看上去很不错,能问下支持汉字和菜单么????

目前我还没有深入研究,不能回答你,有时间我看看,
此帖出自stm32/stm8论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(初级)

10
 
不知道这个GUI适不适合单色的OLED
此帖出自stm32/stm8论坛
 
 
 

回复

1903

帖子

0

TA的资源

版主

11
 
不适合,
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表