需求

使用 stm32cubeide 移植 guix 到 stm32u575 上面。

解决

简单界面设计

  1. 下载 guix studio
  2. 按照例子做个最简单界面
  3. 导出 resourcespecification

源码

  1. 下载 guix studio 对应版本源码
  2. 把源码中的 common 整个文件夹放到工程中
  3. 把源码中的 port 中相应架构的 gx_port.h 放到工程中
  4. 开启 GX_INCLUDE_USER_DEFINE_FILE, 把 guix studio 的例子中的 gx_user.h 复制到工程中。

板级相关

  1. port 文件夹中新增 gx_display_driver_rgb565_stm32u575 相关源文件和头文件。
  2. 在文件中新增:
    UINT GuixDriverSetupRgb565(GX_DISPLAY *display)
    {
       LcdInit();
    
       _gx_display_driver_565rgb_setup(display, (VOID*)GUIX_SCREEN_HANDLE,
    		   GuixBufferToggleRgb565);
    
       display -> gx_display_driver_horizontal_line_draw = GuixHorizontalLineDirectDrawRgb565;
        display -> gx_display_driver_vertical_line_draw = GuixVerticalLineDirectDrawRgb565;
    
        display -> gx_display_driver_pixel_write = GuixPixelDirectWriteRgb565;
        display -> gx_display_driver_pixel_blend = GuixPixelDirectBlendRgb565;
    
    //  display -> gx_display_driver_buffer_toggle = stm324xg_16bpp_buffer_toggle;
    
        display -> gx_display_handle =    GUIX_SCREEN_HANDLE;
    
        return(GX_SUCCESS);
    }
    
  3. 新增上面相关的这些画点和线的函数。

线程

  1. 新增线程函数, 其中设置都是和 guix studio 导出的文件相关的。
    GX_WINDOW 		*pScreen;
    GX_WINDOW_ROOT  *root;
    
    void  GuixMainEntry(ULONG thread_input)
    {
       (void)thread_input;
    
       gx_system_initialize();
    //	gx_system_memory_allocator_set(memory_allocate, memory_free);
    
        gx_studio_display_configure(PRIMARY, GuixDriverSetupRgb565,
    	   LANGUAGE_ENGLISH, PRIMARY_THEME_1, &root);
        gx_studio_named_widget_create((char *)"Button_Screen", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);
    
        gx_widget_show(root);
        gx_system_start();
    
    
       while (1) {
    	   tx_thread_sleep(20);
       }
    }
    
  2. 把线程函数添加到启动线程中即可。

参考