[应用相关]基于stm32 平台开发的超低成本界面系统-爱代码爱编程
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所有,任何人未经允许禁止转载。