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

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

。。。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值