模板: RP2350-Touch-LCD-7-Demo

来自Waveshare Wiki
跳转至: 导航搜索

C环境

目录结构

├── CMakeLists.txt
├── example_auto_set_url.cmake
├── examples # 示例程序
│   ├── CMakeLists.txt
│   ├── adc_battery # 读取电池电压的示例
│   ├── button # 获取BOOT按键状态的示例
│   ├── can_send_recv # CAN接口收发示例
│   ├── gui # lcd使用GUI库显示内容示例
│   ├── hello_world # 打印 hello world 的示例
│   │   ├── CMakeLists.txt
│   │   ├── serial
│   │   └── usb
│   ├── lcd # 测试LCD的示例
│   │   ├── CMakeLists.txt
│   │   ├── lcd_flush_rgb
│   │   ├── lcd_image
│   │   └── lcd_touch
│   ├── lvgl # 一些使用LVGL的示例
│   │   ├── CMakeLists.txt
│   │   ├── lv_port # LVGL对接硬件的源文件
│   │   └── lvgl_example # 运行LVGL自带Demo的示例
│   ├── pio-usb # PIO-USB相关示例
│   │   ├── CMakeLists.txt
│   │   ├── host_hid_to_device_cdc # 使用PIO-USB读取USB设备数据的示例
│   │   └── usb_device # 使用PIO-USB模拟鼠标移动的示例
│   ├── rs485 # RS485接口测试程序
│   └── sd_card_sdio # 测试SD Card读写的示例
├── libraries # 库文件
│   ├── CMakeLists.txt
│   ├── Fonts 
│   ├── GUI
│   ├── bsp # 硬件相关的库
│   ├── lvgl # LVGL库
│   ├── no-OS-FatFS-SD-SDIO-SPI-RPi-Pico # SD Card 相关的库
│   ├── pio-usb # PIO-USB 相关的库
│   └── psramlib # PSRAM 相关的库
├── pico_extras_import_optional.cmake
└── pico_sdk_import.cmake

编译

使用Pico-VScode插件

  • 导入工程, 选择工程目录

RP2350-Touch-LCD-2.8-Demo-1.png

  • 点击Comple编译进行编译

RP2350-Touch-LCD-2.8-Demo-2.png

使用Ubuntu

cd RP2350-Touch-LCD-7-Demo
mkdir build
cd build
cmake ..
make -j8

编译的固件

  • 编译完成后会在目录 build/examples 生成 .uf2 文件

烧录固件

  • 按住板子的BOOT按键,通过 Type-C 线将板子接到电脑的 USB 接口,然后松开BOOT按键,电脑会将识别为一个可移动盘,最后将编译生成的 .uf2 格式的文件复制到可移动盘即可。

新建工程

  • 下面我们以新建名为 lvgl_test 的工程为例。
  • 在 examples/lvgl 目录下新建一个文件夹 lvgl_test ,在这个文件夹上新建 CMakeLists.txt 和 main.c 文件。
  • CMakeLists.txt 文件的内容为
add_executable(lvgl_test
    lvgl_test.c
    ../lv_port/lv_port_disp.c
    ../lv_port/lv_port_indev.c
    )

pico_enable_stdio_usb(lvgl_test 1)
pico_enable_stdio_uart(lvgl_test 0)

# pull in common dependencies
target_link_libraries(lvgl_test 
    pico_stdlib
    bsp
    lvgl
    lvgl::demos)

target_compile_definitions(lvgl_test PRIVATE
    PICO_EMBED_XIP_SETUP=1
)
# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(lvgl_test)
  • main.c 文件的内容为
#include <stdio.h>
#include "pico/stdlib.h"

#include "bsp_i2c.h"
#include "../lv_port/lv_port_disp.h"
#include "../lv_port/lv_port_indev.h"
#include "demos/lv_demos.h"

#include "hardware/pll.h"
#include "hardware/clocks.h"
#include "hardware/structs/pll.h"
#include "hardware/structs/clocks.h"

#define LVGL_TICK_PERIOD_MS 10
void set_cpu_clock(uint32_t freq_Mhz)
{
    set_sys_clock_khz(freq_Mhz * 1000, true);
    clock_configure(
        clk_peri,
        0,
        CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS,
        freq_Mhz * 1000 * 1000,
        freq_Mhz * 1000 * 1000);
}

static bool repeating_lvgl_timer_cb(struct repeating_timer *t)
{
    lv_tick_inc(LVGL_TICK_PERIOD_MS);
    return true;
}

int main()
{
    static struct repeating_timer lvgl_timer;
    set_cpu_clock(240);
    stdio_init_all();
    bsp_i2c_init();
    lv_init();
    lv_port_disp_init();
    lv_port_indev_init();
    add_repeating_timer_ms(LVGL_TICK_PERIOD_MS, repeating_lvgl_timer_cb, NULL, &lvgl_timer);

    // lv_demo_benchmark();
    lv_demo_music();
    // lv_demo_widgets();
    while (true)
    {
        lv_timer_handler();
        sleep_ms(LVGL_TICK_PERIOD_MS);
    }
}
  • 在 examples/lvgl 目录下的 CMakeLists.txt 最后加上。
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/lvgl_test)
  • 重新编译,build/examples/lvgl 会新增一个文件夹 lvgl_test,其中包含编译生成的 .uf2 格式的文件。