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);

。。。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐