硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1187|回复: 4
收起左侧

[STM32H7] freertos lvgl使用问题

[复制链接]

4

主题

19

回帖

31

积分

新手上路

QM

积分
31
QQ
发表于 2024-10-9 11:17:26 | 显示全部楼层 |阅读模式
v7的freertos示例工程,并仿照lvgl template从rte添加lvgl 8.3。
直接复制lvgl template的lv_port_indev_template.c 和lv_port_disp_template.c的内容,
并调整#define configUSE_IDLE_HOOK        和#define configUSE_TICK_HOOK,分别加入bsp_idle 和 TOUCH_Scan()、lv_tick_inc(1)函数
屏幕有光,背光设置完成,但无图像,改了一上午没什么头绪

main函数内容

#include "includes.h"
#include "bsp.h"                         /* 底层硬件驱动 */
#include "lvgl.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"

#if LV_USE_DEMO_WIDGETS
#include "lv_demo_widgets.h"
#endif

static void vTaskTaskUserIF(void *pvParameters);
static void vTaskLED(void *pvParameters);
static void vTaskMsgPro(void *pvParameters);
static void vTaskStart(void *pvParameters);
static void vTaskLVGL(void *pvParameters);
static void AppTaskCreate (void);

static TaskHandle_t xHandleTaskUserIF = NULL;
static TaskHandle_t xHandleTaskLED = NULL;
static TaskHandle_t xHandleTaskMsgPro = NULL;
static TaskHandle_t xHandleTaskStart = NULL;
static TaskHandle_t xHandleLVGLStart = NULL;


static QueueHandle_t MutexSemaphore = NULL;


void vApplicationTickHook( void )
{
        TOUCH_Scan();
        lv_tick_inc(1);
}

void vApplicationIdleHook( void )
{
        bsp_Idle();
}



int main(void)
{
        /* HAL库,MPU,Cache,时钟等系统初始化 */
        System_Init();

        /* 内核开启前关闭HAL的时间基准 */
        HAL_SuspendTick();
        MutexSemaphore=xSemaphoreCreateMutex();

        // __set_PRIMASK(1);  
       
        /* 硬件初始化 */
        bsp_Init();
       
        // vSetupSysInfoTest();
       
        /* 创建任务 */
        AppTaskCreate();
       
    /* 启动调度,开始执行任务 */
    vTaskStartScheduler();

        while(1);
}

static void vTaskLED(void *pvParameters)
{
    while(1)
    {
                bsp_LedToggle(2);
        vTaskDelay(200);
    }
}

static void vTaskMsgPro(void *pvParameters)
{
    while(1)
    {
        bsp_LedToggle(3);
        vTaskDelay(300);
    }
}


static void vTaskStart(void *pvParameters)
{
        TickType_t xLastWakeTime;
        const TickType_t xFrequency = 1;

        HAL_ResumeTick();
       
//        /* 获取当前的系统时间 */
//    xLastWakeTime = xTaskGetTickCount();
//       
//    while(1)
//    {
//                /* 需要周期性处理的程序,对应裸机工程调用的SysTick_ISR */
//                bsp_ProPer1ms();
//        vTaskDelayUntil(&xLastWakeTime, xFrequency);
//    }
        printf("start success");
        vTaskDelete(NULL);
}

static void vTaskLVGL(void *pvParameters)
{
        uint16_t ucBright;
        ucBright = BRIGHT_DEFAULT;
        vTaskDelay(300);
        LCD_SetBackLight(ucBright);
       
        lv_init();
        lv_port_disp_init();
        lv_port_indev_init();
       
        lv_demo_widgets();
       
        while(1)
        {
                xSemaphoreTake(MutexSemaphore,portMAX_DELAY);
                lv_task_handler();
                xSemaphoreGive(MutexSemaphore);
                vTaskDelay(5);
        }
}

*/
static void AppTaskCreate (void)
{
//    xTaskCreate( vTaskTaskUserIF,           /* 任务函数  */
//                 "vTaskUserIF",             /* 任务名    */
//                 512,                       /* 任务栈大小,单位word,也就是4字节 */
//                 NULL,                      /* 任务参数  */
//                 1,                         /* 任务优先级*/
//                 &xHandleTaskUserIF );  /* 任务句柄  */
       
       
        xTaskCreate( vTaskLED,                    /* 任务函数  */
                 "vTaskLED",                  /* 任务名    */
                 512,                         /* 任务栈大小,单位word,也就是4字节 */
                 NULL,                        /* 任务参数  */
                 2,                           /* 任务优先级*/
                 &xHandleTaskLED ); /* 任务句柄  */
       
        xTaskCreate( vTaskMsgPro,                     /* 任务函数  */
                 "vTaskMsgPro",                   /* 任务名    */
                 512,                             /* 任务栈大小,单位word,也就是4字节 */
                 NULL,                           /* 任务参数  */
                 3,                               /* 任务优先级*/
                 &xHandleTaskMsgPro );  /* 任务句柄  */
       
       
        xTaskCreate( vTaskStart,                     /* 任务函数  */
                 "vTaskStart",                   /* 任务名    */
                 512,                            /* 任务栈大小,单位word,也就是4字节 */
                 NULL,                           /* 任务参数  */
                 4,                              /* 任务优先级*/
                 &xHandleTaskStart );   /* 任务句柄  */
                                 
        xTaskCreate( vTaskLVGL,                     /* 任务函数  */
                 "vTaskLVGL",                   /* 任务名    */
                 128*48,                            /* 任务栈大小,单位word,也就是4字节 */
                 NULL,                           /* 任务参数  */
                 4,                              /* 任务优先级*/
                 &xHandleLVGLStart );   /* 任务句柄  */
}

问题可能出在哪里?刚开始学,还请不吝赐教
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

QM

积分
31
QQ
 楼主| 发表于 2024-10-9 14:23:03 | 显示全部楼层
本帖最后由 qingming2333 于 2024-10-9 21:22 编辑

下午起床逐行比对出来了,bsp少配置了一项
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

QM

积分
31
QQ
 楼主| 发表于 2024-10-9 21:05:04 | 显示全部楼层
好,忽然发现新的问题。
在已经上电的情况下拔掉stlink没有问题。但拔掉stlink重新上电,触摸会无反馈

回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

QM

积分
31
QQ
 楼主| 发表于 2024-10-9 21:12:40 | 显示全部楼层
或者在不连接stlink的情况下,上电后手动复位一下,才能正常。是否是应该修改代码,把触摸写进队列,然后在touch_get里读取?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-10-10 08:29:58 | 显示全部楼层
qingming2333 发表于 2024-10-9 21:05
好,忽然发现新的问题。
在已经上电的情况下拔掉stlink没有问题。但拔掉stlink重新上电,触摸会无反馈

应该修改代码,不排除触摸没有正常初始化,也就是触摸里面延迟的API没有正常执行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 18:22 , Processed in 0.053188 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表