发新帖本帖赏金 10.00元(功能说明)我要提问
返回列表
打印
[应用相关]

基于STM32 平台开发的超低成本界面系统

[复制链接]
2359|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      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;
        }
}


使用特权

评论回复

打赏榜单

21ic小管家 打赏了 10.00 元 2023-05-26
理由:签约作者奖励

发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

83

主题

158

帖子

3

粉丝