编译及配置

如果您是从github,或者gitee拉取的工程,在进行编译之前,应该先更新子模块。 切换分支时,同样需要,方式如下:

# 位于工程根目录下
git submodule update --init

说明

我们为裸机和FreeRTOS工程添加了对 pico2 的支持,使用如下命令为其编译

# 位于工程根目录下
mkdir build-pico2 && cd build-pico2
cmake -DPICO_BOARD=pico2 ..
make -j$(nproc)

pico_dm_qd3503728_freertos

只针对于本产品的freertos工程

根目录结构

CMakeLists.txt  # 根目录cmake配置
LICENSE         # 许可证
README.md       # 自述文件
include/        # 头文件
lib/            # 第三方库
pico_sdk_import.cmake # pico sdk前置文件
src/            # 工程源码

src目录结构

CMakeLists.txt    # 工程主要cmake配置
FreeRTOSConfig.h  # FreeRTOS 配置文件
backlight.c       # 背光驱动
factory/          # 工厂测试相关
ft6236.c          # 触摸驱动
i2c_tools.c       # I2C 工具
ili9488.c         # 显示驱动
lv_conf.h         # lvgl 配置文件
lvgl/             # lvgl 源码
main.c            # 程序入口
pio/              # PIO 相关驱动
porting/          # lvgl 移植文件

编译生成固件

cd pico_dm_qd3503728_freertos

mkdir -p build
cd build
cmake ..
make -j12

pico_dm_8080_template

针对多个产品的工程模板

根目录结构

CMakeLists.txt  # 根目录cmake配置
LICENSE         # 许可证
README.md       # 自述文件
include/        # 头文件
lib/            # 第三方库
pico_sdk_import.cmake # pico sdk前置文件
src/            # 工程源码

src目录结构

backlight.c     # 背光驱动
cmake           # 一些cmake配置文件,板级或驱动级配置
CMakeLists.txt  # src cmake配置
factory       # 工厂测试相关
FreeRTOSConfig.h  # FreeRTOS配置文件
ft6236.c    # ft6236 电容触摸屏驱动
gt911.c     # gt911 电容触摸屏驱动
i2c_tools.c # i2c工具
indev.c     # 输入驱动框架
lv_conf.h   # lvgl配置头文件
lvgl        # lvgl源码
main.c      # 程序入口
ns2009.c    # ns2009 电阻触摸屏驱动
pio         # pio相关驱动
porting     # lvgl移植文件
tft_1p5623.c  # 1p5623 面板驱动
tft.c         # 显示驱动框架
tft_ili9488.c # ili9488 显示驱动
tft_r61581.c  # r61581 显示驱动
tft_st6201.c  # st6201 显示驱动
tft_st7789.c # st7789 显示驱动
tsc2007.c   # tsc2007 电阻触摸屏驱动

编译生成固件

cd pico_dm_8080_template

mkdir -p build
cd build
cmake ..
make -j12

MicroPython

拉取并进入工程目录

git clone https://github.com/embeddedboys/lv_micropython.git
cd lv_micropython

切换你需要编译的分支版本,对于LVGL V8.3

git checkout release/v8

对于LVGL V9

git checkout release/v9

说明

如果已经进行过编译,若切换分支,则需要在切换分支之后运行如下命令同步切换子模块版本

git submodule update

若拉取模块过程失败则需重新执行,如果还是报错,请在对应make命令最后加上clean进行清理,然后重新执行对应命令。

embedded_graphics

环境配置

  1. 先安装Rust环境,在linux或者wsl中执行如下命令
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. 安装需要的工具链
rustup self update
rustup update stable
rustup target add thumbv6m-none-eabi
  1. 安装调试烧录工具
cargo install flip-link
# Useful to creating UF2 images for the RP2040 USB Bootloader
cargo install elf2uf2-rs --locked
# Useful for flashing over the SWD pins using a supported JTAG probe
cargo install --locked probe-rs-tools

编译及烧录

在安装完上一节中的软件包之后,执行如下命令编译工程

cargo build -r

-r 代表 release 编译

编译指定example

cargo build -r --example demo-text-tga

有两种方式将编译好的文件烧录到Pico

  1. 通过CMSIS-DAP调试器

你可能需要先配置udev rules才能让cmsis-dap得以识别到,复制工程目录下的50-cmsis-dap.rules, 到/etc/udev/rules.d/路径下,然后执行

sudo udevadm control --reload-rules
sudo udevadm trigger

使用如下命令通过调试器烧录,并监视RTT调试信息

probe-rs run --chip RP2040 --protocol swd target/thumbv6m-none-eabi/release/rp2040-project-template
  1. 通过RP2040的bootloader UF2烧录

按住核心板的BOOTSEL按键,插入USB线,或者在连接有线的情况下,按下拓展板上的复位键,让RP2040进入UF2下载模式,再通过如下命令将UF2文件下载至RP2040。

elf2uf2-rs -d target/thumbv6m-none-eabi/release/rp2040-project-template

或者你可以简单的运行如下命令,编译并将文件烧录到RP2040。

  1. 修改.cargo/config.toml中的runner配置为符合您当前情况的配置。
runner = "probe-rs run --chip RP2040 --protocol swd"
# runner = "elf2uf2-rs -d"
  1. 运行target
cargo run -r

运行指定example

cargo run -r --example demo-text-tga

Slint

先按照环境配置中的步骤,安装依赖,然后在根目录下执行:

cargo run --target=thumbv6m-none-eabi --features=pico --release

注意,根据您当前期望的下载方式修改.cargo/config.toml中的runner属性

# 通过uf2下载
# runner = "elf2uf2-rs -d"

# 通过debugger下载
runner = "probe-rs run --chip RP2040 --speed 10000"

烧录

可参考固件烧录章节,此处给出示例

UF2

按住核心板上的BOOTSEL键,然后插入USB线缆,或者在插入线缆的情况下按下RUN按键, 此时RP2040将进入BOOTROM USB下载模式。

cp src/rp2040-freertos-template.uf2 /media/$USER/RPI-RP2/

说明

Windows 用户可右键 uf2 文件选择发送到 RPI-RP2

openocd

openocd -f interface/cmsis-dap.cfg -c "adapter speed 5000" -f target/rp2040.cfg -s tcl -c "program src/rp2040-freertos-template.elf verify reset exit"

program后面跟的参数是需要烧录的elf文件,当然也可以烧录bin文件,方式如下

openocd -f interface/cmsis-dap.cfg -c "adapter speed 10000" -f target/rp2040.cfg -s tcl -c "program src/rp2040-freertos-template.bin verify reset exit 0x10000000"

写入到0x10000000处地址,也就是rp2040映射Flash的地方

如何制作一个picoprobe(debugprobe)调试器,可以参考这个章节

说明

WSL用户需要先将daplink连接至WSL中,可使用usbipd

CMakeLists.txt 配置说明

此处列出可供用户自定义修改的选项

是否开启超频

set(OVERCLOCK_ENABLED 0)    # 1: enable, 0: disable

注意

过度超频可能会导致核心板稳定性下降,但并不会对拓展版造成影响。

适当的超频可以达到更流畅的运行效果,用户自行承担其风险。

超频预设

# Overclocking profiles
#      SYS_CLK  | FLASH_CLK | Voltage
#  1  | 266MHz  |  133MHz   |  1.10(V) (default, stable, recommended for most devices)
#  2  | 240MHz  |  120MHZ   |  1.10(V) (more stable)
#  3  | 360MHz  |  90MHz    |  1.20(V)
#  4  | 400MHz  |  100MHz   |  1.30(V)
#  5  | 420MHz  |  105MHz   |  1.30(V)
set(OVERCLOCK_PROFILE 4)

您也可根据核心板稳定程度,自行调整超频幅度。

注意

在设置CPU频率时,还应注意是否符合Flash的工作频率,公式如下:

Flash Clock = SYS_CLK / PICO_FLASH_SPI_CLKDIV

PICO_FLASH_SPI_CLKDIV的默认值为2

简单来说,当CPU频率处于266MHz的情况下,Flash工作频率为133MHz

在本工程中,当CPU频率大于266MHz时,PICO_FLASH_SPI_CLKDIV自动修改为4,否则将超出Flash最大工作频率

LCD 相关

可在此处配置引脚、时钟、是否启用PIO等。 若存在缺失配置项,则表示该工程不支持调整。

# LCD Pins for 8080 interface
set(LCD_PIN_DB_BASE  0)  # 8080 LCD 数据总线第0脚
set(LCD_PIN_DB_COUNT 16) # 8080 LCD 数据总线宽度
set(LCD_PIN_CS  18)  # 8080 LCD 片选引脚
set(LCD_PIN_WR  19)  # 8080 LCD 写信号引脚
set(LCD_PIN_RS  20)  # 8080 LCD 数据/寄存器选择引脚
set(LCD_PIN_RST 22)  # 8080 LCD 复位引脚
set(LCD_PIN_BL  28)  # 8080 LCD 背光引脚
set(DISP_OVER_PIO 1) # LCD驱动模式 1: PIO, 0: GPIO
set(PIO_USE_DMA   1)   # 是否启用DMA 1: use DMA, 0: not use DMA
set(I80_BUS_WR_CLK_KHZ 50000) # 8080 LCD 写信号频率

选择显示驱动

# LCD driver type
set(LCD_DRV_USE_ST7789  0)
set(LCD_DRV_USE_ILI9488 0)
set(LCD_DRV_USE_ILI9806 1)
set(LCD_DRV_USE_R61581  0)
set(LCD_DRV_USE_ST6201  0)
set(LCD_DRV_USE_1P5623  0)

选择触摸驱动

# Input device driver type
set(INDEV_DRV_USE_FT6236  0)
set(INDEV_DRV_USE_NS2009  0)
set(INDEV_DRV_USE_TSC2007 1)
set(INDEV_DRV_USE_GT911   0)

杂项

set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 设置自动生成compile_commands.json
pico_enable_stdio_usb(${PROJECT_NAME} 0)  # 设置stdio通过usb cdc输出
pico_enable_stdio_uart(${PROJECT_NAME} 1) # 设置stdio通过uart输出
pico_add_extra_outputs(${PROJECT_NAME}) # 输出额外的编译文件,例如uf2等