[应用相关]基于STM32 平台开发的超低成本界面系统

FlyThingsLite是一个基于STM32的低资源消耗界面系统,它提供了一种使用FlyThingsLiteIDE快速设计界面的方法,支持高压缩率的BITMAP编解码。通过Opencpu模式减少MCU使用,简化与传统串口屏的对比。文章详细介绍了如何使用IDE创建项目、添加控件、模拟运行以及下载程序到MCU的过程。
摘要由CSDN通过智能技术生成

      FlyThings Lite 是中科世为基于STM32 平台开发的超低成本界面系统。低于 2K 的 RAM,16KFlash的硬件资源消耗。使用 FlyThingsLite IDE 开发工具快速设计界面。支持 ZKBITMAP 高达 90%压缩率的 BITMAP 编解码算法。Opencpu 的模式,更便于用户使用,相比传统串口屏直接节省一个 MCU。
     与传统串口屏的对比


  系统框架图:



新建 FlyThings Lite  项目



找到软件顶部菜单栏,依次选择 文件 -> 新建 -> FlyThings for MCU Project
输入项目名称,选择平台。选择分辨率,或者按照格式,输入自定义的分辨率。点击完成。
在软件的左侧,项目资源管理器区域,找到新建的项目。
选中项目名,右键,在弹出的菜单中,选择模拟器运行。
软件右下角给出正在编译的提示,几秒钟后,自动弹出模拟器,查看运行效果。
默认新建的项目,只有一个白色的窗口,参照下一章节添加控件。
添加控件
找到项目资源管理器,双击指定的项目名,打开目录。
双击 ui 文件夹下的 main.form 文件,将在右侧看到该 UI 文件的预览效果。
在预览图的右侧控件列表里,找到静态标签控件,
鼠标左键点击静态标签控件不松开,然后将其拖拽到预览图上的空白位置,松开左键,就能
看到自动生成的控件。
在软件的左下角,有一个大纲视图,可以查看底窗口下包含的所有控件。
在预览图中,左键点击刚才添加的控件,软件的最右侧属性栏,将显示该控件的所有可编辑
的属性。
在属性栏里,可以自由编辑,大部分的属性,在修改后,可以立即看到预览效果。
或者选择模拟器运行,查看完整效果。

下载程序到 MCU



保持电脑与 MCU 串口正常连接。
找到软件顶部的菜单栏,依次选择窗口->首选项->FlyThings Lite
在下载选项组中,选择与 MCU 连接的串口。
尽量选择 MCU 能支持的最高波特率,这将有效缩短下载时间。
其他保持默认。
设置完成后,点击应用并关闭保存设置。



main.c

#include "logic/main.h"

#include "other_app.h"



//static char index[2] = {1,0};



void ui_main_on_page_open(uint8_t page) {

        char buff[5];

        buff[0] = wash_mode.CurVal[wash_mode.pageid];

        buff[1] = '\0';

        imagetext_set_text(UI_WIDGET_MAIN_ArtText1, (const char*)buff);

}



/**

 * [url=home.php?mod=space&uid=247401]@brief[/url] 定时器回调接口

 * @param millisecond   定时器周期,单位 ms

 * @param count  累计次数

 */

void ui_main_on_timer(uint32_t millisecond, uint32_t count) {

//        if(count%50 == 0) {

//                index[0]++;

//                if(index[0] > 3) {

//                        index[0] = 1;

//                }

//                index[1] = '\0';

//                imagetext_set_text(UI_WIDGET_MAIN_ArtText1, (const char*)index);

//        }

}



/**

 * @brief 按钮点击事件回调接口

 * @param button   按钮控件指针

 * @param type     触摸事件类型

 */

void ui_main_on_button_touch_event(button_t *button, touch_type_e type) {



}



/**

 * @brief 进度条回调接口

 * @param progress  进度条控件指针

 * @param val       进度值

 */

void ui_main_on_progress_changed(progress_t *progress, uint16_t val) {



}



/**

 * @brief 动画播放结束回调接口

 * @param animation  动画控件指针

 */

void ui_main_on_animation_play_end(animation_t *animation) {



}


usermain




#include "main.h"

#include "devmodule.h"



#include "context/guicontext.h"

#include "event/event.h"

#include "timer/timer.h"

#include "graphics/video.h"

#include "input.h"

#include "other_app.h"

#include "dev_time17.h"





const S_DEV* uartdev;

const S_DEV* uart1dev;



static uint32_t tick5ms = 0;

static uint32_t tick10ms = 0;

static uint32_t tick50ms = 0;

static uint32_t tick100ms = 0;

static uint32_t tick500ms = 0;

static uint32_t tick1s = 0;

static uint32_t tick60s = 0;

static int proframe = 0;

uint8_t g_te;

extern const flythings_flash        m_flash;

const flythings_callback_t cbs={

        .init_event = event_init,

        .init_timer = timer_init,

        .init_video = video_init,

        .deinit_event = event_deinit,

        .deinit_timer = timer_deinit,

        .deinit_video = video_deinit,

        .cb_on_pageopen = on_page_open,

        .cb_on_animation_play_end = on_animation_play_end,

        .cb_on_button_touch_event = on_button_touch_event,

        .cb_on_progress_changed = on_progress_changed,

        .cb_on_timer = on_timer,

        .poll_timer = timer_check,

        .poll_event = event_poll,

        .flip_video = video_flip,

        .fly_debug = printf

};





void user_init(void){

#if LCD_BL_USE_PWM        

        DEV_TIM3_Init();

#endif

        MX_TIM17_Init();

        otherapp.init();

        uartdev = loadDev(&dev_uartupgrade);

        uart1dev = loadDev(&dev_uart1);

         printf("load uart \r\n");

        printf("led on\n");

        tick10ms = HAL_GetTick();

        tick50ms = HAL_GetTick();

        tick100ms = HAL_GetTick();

        tick500ms = HAL_GetTick();

        tick1s = HAL_GetTick();

        tick60s = HAL_GetTick();

        tick5ms = HAL_GetTick();

        

        LCD_BL_OFF();

        m_flash.flash_init();

        video_info_t vi = { 240, 240, 16, 0 };

        if(gui_context_init(&vi,&cbs,&m_flash)){

                gui_context_open_page(0);

                //LCD_BL_ON();

                printf("open page 0");

        }

        gui_context_run();

        HAL_Delay(10);

        LCD_BL_ON();

}



uint8_t ui_page = 0;        //test

uint8_t testmcudataflag = 0;        //for test

void user_loop(void){

        static uint32_t systick = 0;

        gui_context_run();

        systick = HAL_GetTick();

        if((systick-tick10ms) > 10){

          tick10ms = systick;

           uartdev->procMsg(DEVMSG_TIMER10ms,0,0);

           uart1dev->procMsg(DEVMSG_TIMER10ms,0,0);

           otherapp.procMsg(DEVMSG_TIMER10ms,0,0);

        }

        if((systick-tick5ms) > 5){

          tick5ms = systick;

          procKey();

        }

        if((systick-tick50ms) > 50){

          tick50ms = systick;

          uartdev->procMsg(DEVMSG_TIMER50ms,0,0);

           otherapp.procMsg(DEVMSG_TIMER50ms,0,0);

        }

        if((systick - tick100ms) >= 100){

          tick100ms = systick;

          uartdev->procMsg(DEVMSG_TIMER100ms,0,0);

           otherapp.procMsg(DEVMSG_TIMER100ms,0,0);

        }

        if((systick - tick500ms) >= 500){

          tick500ms = systick;

                

        }

        if((systick - tick1s) >= 1000){

                tick1s = systick;

                printf("tick1s\n");

                //ui_page++;

                //gui_context_open_page(ui_page%4);

        }

        if((systick - tick60s) >= (60000*10)){//10000){//

                tick60s = systick;

        }

}

---------------------
作者:abner_ma
链接:https://bbs.21ic.com/icview-3300266-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值