【DigiKey“智造万物,快乐不停”创意大赛】移植RT-Thread + LVGL
[复制链接]
我的项目是冷链温度监控系统,运行的基础环境为rtthread操作系统,用lvgl来写交界面。下面介绍如何创建rtthread以及移植lvgl。
【开发环境】
此次开发用rtthread studio来作为ide进行开发。
【实现步骤】
- 安装stm32f746开发板。打开SDK管理器,按下图安装stm32f746-ST-DISCO开发板:
- 新建RT-Thread项目,选择STM32F746-ST-DISCO开发板,并生成基础工程:
- 生成工程后,打开RT-Thread Settings安装lvgl安装包:
- 复制官方的开发板驱动包到工程:
- 添加lv_config.h、lv_port_disp.c/h、lv_port_indev.c/h的配置文件到application目录下,
Lv_conifg.h为lvgl的工程配置文件。
Lv_port_disp 为LCD驱动库
Lv_port_indev为触摸驱动库。
- 在main.c中添加lvgl驱动测试如下:
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include "lvgl.h"
#include "lv_port_indev.h"
/* defined the LED1 pin: PI1 */
#define LED1_PIN GET_PIN(I, 1)
lv_obj_t *label;
void lvgl_lable_test(){
/* 创建一个标签 */
static lv_style_t font_style;
lv_style_init(&font_style);
lv_style_set_text_font(&font_style, &lv_font_montserrat_14);
// font_label = lv_label_create(src, NULL);
label = lv_label_create(lv_scr_act());
if (NULL != label)
{
// lv_obj_set_x(label, 90); // 设置控件的X坐标
// lv_obj_set_y(label, 100); // 设置控件的Y坐标
// lv_obj_set_size(label, 60, 20); // 设置控件大小
lv_label_set_text(label, "Counter"); // 初始显示 0
lv_obj_add_style(label, &font_style, LV_STATE_DEFAULT);
// lv_obj_center(label); // 居中显示
lv_obj_align(label, LV_ALIGN_CENTER, 0, -50); // 居中显示后,向上偏移50
}
}
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] 按钮事件回调函数
*/
static void btn_event_callback(lv_event_t* event)
{
static uint32_t counter = 1;
lv_obj_t* btn = lv_event_get_target(event); //获取事件对象
if (btn != NULL)
{
lv_label_set_text_fmt(label, "%d", counter); //设置显示内容
lv_obj_align(label, LV_ALIGN_CENTER, 0, -50); // 居中显示后,向上偏移50
counter++;
}
}
/**
* @brief 创建按钮
*/
void lvgl_button_test(){
/* 在当前界面中创建一个按钮 */
lv_obj_t* btn = lv_btn_create(lv_scr_act()); // 创建Button对象
if (btn != NULL)
{
lv_obj_set_size(btn, 80, 20); // 设置对象宽度和高度
// lv_obj_set_pos(btn, 90, 200); // 设置按钮的X和Y坐标
lv_obj_add_event_cb(btn, btn_event_callback, LV_EVENT_CLICKED, NULL); // 给对象添加CLICK事件和事件处理回调函数
lv_obj_align(btn, LV_ALIGN_CENTER, 0, 50); // 居中显示后,向下偏移50
//
lv_obj_t* btn_label = lv_label_create(btn); // 基于Button对象创建Label对象
if (btn_label != NULL)
{
lv_label_set_text(btn_label, "button"); // 设置显示内容
lv_obj_center(btn_label); // 对象居中显示
}
}
}
int main(void)
{
int count = 1;
/* set LED1 pin mode to output */
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
/* Enable I-Cache */
SCB_EnableICache();
/* Enable D-Cache */
SCB_EnableDCache();
lv_init();
lvgl_lable_test();
lvgl_button_test();
while (count++)
{
lv_task_handler();
rt_thread_mdelay(5);
// rt_pin_write(LED1_PIN, PIN_HIGH);
// rt_thread_mdelay(500);
// rt_pin_write(LED1_PIN, PIN_LOW);
// rt_thread_mdelay(500);
}
return RT_EOK;
}
下载到开发板后效果如下:
RTT+LVGL
|