本贴只记录从搭建好环境以后可能遇到的坑,请同学们择优而观
坑(一)
make以后出现
- fatal error: lwip/dns.h: No such file or directory
复制代码 原因是bl616板级模块中的没有添加该库依赖而引用,由于我并不会cmake,所以只能注释掉11行和212行之后就完美编译了
坑(二)
GPIO引脚错误,默认的lcd_conf_user.h里面与屏幕有关的引脚设置错了,我用的是官方屏幕,而原始的ST7796配置中用的是反色初始化,解决方法是加入下列内容
- #define LCD_SPI_ST7796_Ai
复制代码 在定义使用的屏幕(304行左右)
- #elif defined LCD_SPI_ST7796_Ai
- /* Selecting interface type, more configuration of peripherals comes later
- 1: SPI peripheral, supported functions: spi-4wire,
- */
- #define LCD_SPI_INTERFACE_TYPE 1
- /* Selecting pixel format
- 1: rgb565
- */
- #define ST7796_SPI_PIXEL_FORMAT 1
- /* enable the lcd reset function
- 0: Does not care about lcd hard reset
- 1: use gpio to reset the lcd
- */
- #define LCD_RESET_EN 1
- /* LCD width and height */
- #define ST7796_SPI_W 240
- #define ST7796_SPI_H 320
- /* The offset of the area can be displayed */
- #define ST7796_SPI_OFFSET_X 0
- #define ST7796_SPI_OFFSET_Y 0
- /* Color reversal, Some screens are required
- 0: disable
- 1: enable
- */
- #define ST7796_SPI_COLOR_REVERSAL 0
- // #define LCD_ROTATED_NONE
- #define LCD_ROTATED_90
- // #define LCD_ROTATED_180
- // #define LCD_ROTATED_270
- #endif
复制代码 在413行 左右,定义LCD_GPIO引脚处(官方S1配套屏幕用的是4线驱动)
修改成- /* spi pin, hardware controlled */
- #define LCD_SPI_HARD_4_PIN_CLK GPIO_PIN_17 //SPI_SCK 屏幕SCK引脚
- #define LCD_SPI_HARD_4_PIN_DAT GPIO_PIN_15 //SPI_MOSI 屏幕MOSI
- /* cs/dc pin, software controlled */
- #define LCD_SPI_HARD_4_PIN_CS GPIO_PIN_12 //SPI_CS 屏幕CS
- #define LCD_SPI_HARD_4_PIN_DC GPIO_PIN_16 //SPI_LCD_DC (SPI_LCD_RS) 屏幕RS/DC
复制代码 卡死,这个原因也不知道为啥,就算放在主函数while循环也是一样,现象如下
我把lvgl刷屏函数直接丢到一个FreeRTOS线程里面就能跑了。
现在main.c里面的文件如下
- #include "FreeRTOS.h"
- #include "task.h"
- #include "timers.h"
- #include "board.h"
- #define DBG_TAG "MAIN"
- #include "log.h"
- #include "lv_conf.h"
- #include "lvgl.h"
- #include "lv_port_disp.h"
- #include "lv_port_indev.h"
- #include "lcd.h"
- #include "portable.h"
- #include "easyflash.h"
- #include "bflb_mtd.h"
- /* lvgl log cb */
- void lv_log_print_g_cb(const char *buf)
- {
- printf("[LVGL] %s", buf);
- }
- static TaskHandle_t lvgl_TaskHandle;
- #define LVGL_STACK_SIZE 2048 //1024
- #define LVGL_TASK_PRIORITY 15
- void lvgl_task(void* param)
- {
- while (1)
- {
- lv_task_handler();
- vTaskDelay(1);
- }
- }
- int main(void)
- {
- board_init();
- printf("lvgl case\r\n");
- /* lvgl init */
- lv_log_register_print_cb(lv_log_print_g_cb);
- lv_init();
- lv_port_disp_init();
- lv_port_indev_init();
- lv_demo_benchmark();
- // lv_demo_stress();
- // lv_timer_handler();
- printf("lvgl success\r\n");
- xTaskCreate(lvgl_task, (char*)"lvgl", LVGL_STACK_SIZE, NULL, LVGL_TASK_PRIORITY, &lvgl_TaskHandle);
- vTaskStartScheduler();
- while (1) {
- // lv_task_handler();
- // bflb_mtimer_delay_ms(1);
- vTaskDelay(5000/portTICK_RATE_MS);
- }
- }
复制代码 另外在examples/lvgl目录下要添加如下文件内容
FreeRTOSConfig.h是有关于FreeRTOS的配置,比如tick_rate和最大优先级等,其中最大优先级需改成32(或者将LVGL任务优先级改成5)
最后结果当然是轻松刷屏啦!
|
|