LVGL触控板(触摸屏)函数移植后不能使用

  • Post author:
  • Post category:其他


1、前言:

开发环境:IAR8.3,STM32F103RE,2.8寸TFTLCD。

屏幕与触控版都正常。

2、现象:

移植后,按按扭没有反应。Debug跟踪发现不能进触控板的读点函数(touchpad_read)中。

3、原因:

初始化函数3中void lv_port_indev_init(void)使用同一个变量对鼠标,按键等多个接口做配置,改变了原有的值。具体如下:


static

lv_indev_drv_t

indev_drv

touchpad_init();

/*Register a touchpad input device*/

lv_indev_drv_init(&indev_drv);


indev_drv.type

= LV_INDEV_TYPE_POINTER;


indev_drv.read_cb

= touchpad_read;

indev_touchpad = lv_indev_drv_register(

&indev_drv

);


mouse_init();

/*Register a mouse input device*/

lv_indev_drv_init(&indev_drv);


indev_drv.type

= LV_INDEV_TYPE_POINTER;


indev_drv.read_cb

= mouse_read;

indev_mouse = lv_indev_drv_register(

&indev_drv

);

。。。

如上可知indev_drv是static的。注册鼠标时,会改变indev_drv.read_cb函数的值。可以推测出lv_indev_drv_register是直接使用indev_drv的变量,而不是做一个拷贝。

4、解决方法:

1)、

将除触控板外的其它函数,用

#if 0

#endif

注释掉。

2)、

如果使用了其它输入设置(比如鼠标),可以多声明几个变量:

static lv_indev_drv_t indev_drv;

static lv_indev_drv_t indev_drv2;

。。。

/*Initialize your touchpad if you have*/

mouse_init();

/*Register a mouse input device*/

lv_indev_drv_init(&indev_drv2);

indev_drv2.type = LV_INDEV_TYPE_POINTER;

indev_drv2.read_cb = mouse_read;

indev_mouse = lv_indev_drv_register(&indev_drv2);

。。。



版权声明:本文为c_1969原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。