LVGL触摸移植教程:在stm32野火F103上实现

系列文章目录


目录

系列文章目录

章目录

目标

一、认识端口文件

二、使能 lv_port_indev.c 

三、接口函数

1.输入设备初始化

四、Main函数

五、过程中的疑难杂症

1.内存不足

2、LCD白屏

五、效果

总结


目标

在显示的基础上添加触摸输入


提示:以下是本篇文章正文内容,下面案例可供参考

一、认识端口文件

这两个是输入设备的端口文件,这里我改过文件名(原文件名叫 lv_port_indev_template

 只需要把相应的触摸屏驱动函数添加到文件里的函数里即可驱动

二、使能 lv_port_indev.c 

首先把 文件使能 


在 lv_port_indev.c 的顶部 (红圈),设置为#if  1

三、接口函数

 函数均在lv_port_indev.c

1.输入设备初始化

void lv_port_indev_init(void)

用于初始化你的输入设备 (触摸屏、按键、鼠标键盘等等)

该函数结构还是比较分明的

 可选择你需要的输入设备裁剪 (这里只用了触摸屏所以,其他全部注释掉,我用的#if 0 )


下面主要看lv_port_indev_init(void)的触摸屏部分

我们主要做的就是实现画红线的函数

   touchpad_init();                    //初始化你的触摸模块

再touchpad_init函数添加你的触摸模块初始化函数

/*Initialize your touchpad*/
static void touchpad_init(void)
{
    /*Your code comes here*//*这里放你的模块初始化代码**/
		
}

touchpad_read()       //回调函数

主要功能是获取触摸屏状态和按下坐标,LVGL会自动定期调用此函数

下面是函数原形

需要修改的是画红线的2个函数

static bool touchpad_is_pressed(void)             //返回触摸状态  按下返回true  否则false

/*Return true is the touchpad is pressed*/
static bool touchpad_is_pressed(void)
{
    /*Your code comes here*/
		/*这里添加判断你的触摸状态的代码*/
    return false;
}

例子:

用的野火的触摸屏库函数

/*Return true is the touchpad is pressed*/
static bool touchpad_is_pressed(void)
{
    /*Your code comes here*/
		if(XPT2046_TouchDetect()==TOUCH_PRESSED) return true;  /*按下返回真*/
    return false;
}

touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)          //获取触摸屏坐标

/*Get the x and y coordinates if the touchpad is pressed*/
static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)
{
    /*Your code comes here*/
	
		/*这里添加你的代码(获取触摸模块的坐标)*/

    (*x) = your_x;   
    (*y) = your_y;
}

例子:

野火的获取坐标函数 

添加到上面的源码

/*Get the x and y coordinates if the touchpad is pressed*/
static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)
{
    /*Your code comes here*/
	
		XPT2046_Get_TouchedPoint(&cinfo1,strXPT2046_TouchPara);  //获取坐标

    (*x) = cinfo1.x;        //把获取的值给LVGL
    (*y) = cinfo1.y;
}

四、Main函数

最后直接在main函数 调用

lv_port_indev_init(void)

即可

五、过程中的疑难杂症

1.内存不足

解决

 再魔术棒c/c++   把箭头指向的配置项 配置为Level3  (原来是Level0  )

也可以改显示缓冲区的大小

更改buf_1大小


 

以下是野火例程的问题

2、LCD白屏

好像是LCD初始化太快了

 结果仿真调试 发现逐条运行时  REG_Config 函数的没有问题

但全速运行时会有问题   ,所以我加了2条延时函数 

五、效果

   添加了部件如圆弧 按键 ,如果你完成了输入设备的配置 ,你可以对你的控件进行操作

 滑动圆弧

总结

        好多bug、太痛苦了

物联沃分享整理
物联沃-IOTWORD物联网 » LVGL触摸移植教程:在stm32野火F103上实现

发表评论