ITADN
raspberrypi/pico-sdk
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Raspberry Pi Pico SDK

Raspberry Pi Pico SDK(以下简称 SDK)提供了为基于 RP 系列微控制器的设备(如 Raspberry Pi Pico 或 Raspberry Pi Pico 2)编写 C、C++ 或汇编语言程序所需的头文件、库和构建系统。

SDK 旨在为嵌入式和非嵌入式 C 开发者提供熟悉的 API 和编程环境。 同一时间设备上只运行一个程序,并以常规的 main() 方法启动。支持标准 C/C++ 库,以及用于访问 RP 系列微控制器所有硬件(包括 PIO(可编程 IO))的 C 级库/API。

此外,SDK 提供了用于处理定时器、同步、Wi-Fi 和蓝牙网络、USB 和多核编程的高级库。这些库应足够全面,使得您的应用程序代码很少或根本不需要直接访问硬件寄存器。但是,如果您需要或偏好访问原始硬件寄存器,您也可以在 SDK 中找到完整且注释详尽的寄存器定义头文件。无需在数据手册中查找地址。

SDK 可用于构建从简单应用程序、完整的运行时环境(如 MicroPython)到 RP 系列微控制器片上 bootrom 本身的底层软件。

整个 SDK 的设计目标是简单但强大。

尚未准备好纳入 SDK 的其他库/API 可在 pico-extras 中找到。

文档

请参阅 Raspberry Pi Pico 系列入门指南,了解如何设置硬件、IDE/环境,以及如何为 Raspberry Pi Pico 和其他基于 RP 系列微控制器的设备构建和调试软件。

请参阅 使用 Raspberry Pi Pico W 连接互联网,了解如何编写可连接互联网的 Raspberry Pi Pico W 应用程序。

请参阅 Raspberry Pi Pico 系列 C/C++ SDK,了解如何使用 SDK 进行编程,探索更多高级功能,并获取完整的基于 PDF 的 API 文档。

请参阅 在线 Raspberry Pi Pico SDK API 文档,获取基于 HTML 的 API 文档。

示例代码

请参阅 pico-examples,获取可构建的示例代码。

获取最新的 SDK 代码

GitHub 上 pico-sdkmaster 分支包含 SDK 的 最新稳定版本。如果您需要或希望测试即将推出的功能,可以尝试 develop 分支。

快速启动您的项目

使用 Visual Studio Code

您可以在 VS Code 中安装 Raspberry Pi Pico Visual Studio Code 扩展

Unix 命令行

这些说明非常简略,且仅适用于基于 Linux 的系统。对于详细步骤、 其他平台的说明以及总体建议,我们建议您参阅 Raspberry Pi Pico 系列 C/C++ SDK

  1. Install CMake (at least version 3.13), python 3, a native compiler, and a GCC cross compiler
    sudo apt install cmake python3 build-essential gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
    
  2. Set up your project to point to use the Raspberry Pi Pico SDK
  • 通过本地克隆 SDK(最常见): 1. git clone 此 Raspberry Pi Pico SDK 仓库 1. 将 pico_sdk_import.cmake 从 SDK 复制到您的项目目录 2. 在您的环境中将 PICO_SDK_PATH 设置为 SDK 位置,或稍后将其(-DPICO_SDK_PATH=)传递给 cmake。 3. 设置一个 CMakeLists.txt,例如:

        ```cmake
        cmake_minimum_required(VERSION 3.13...3.27)
    
        # initialize the SDK based on PICO_SDK_PATH
        # note: this must happen before project()
        include(pico_sdk_import.cmake)
    
        project(my_project)
    
        # initialize the Raspberry Pi Pico SDK
        pico_sdk_init()
    
        # rest of your project
    
        ```
    
  • 或者将 Raspberry Pi Pico SDK 作为子模块: 1. 将 SDK 克隆为名为 pico-sdk 的子模块 1. 设置一个 CMakeLists.txt,例如:

        ```cmake
        cmake_minimum_required(VERSION 3.13...3.27)
    
        # initialize pico-sdk from submodule
        # note: this must happen before project()
        include(pico-sdk/pico_sdk_init.cmake)
    
        project(my_project)
    
        # initialize the Raspberry Pi Pico SDK
        pico_sdk_init()
    
        # rest of your project
    
        ```
    
  • 或从 GitHub 自动下载: 1. 将 pico_sdk_import.cmake 从 SDK 复制到您的项目目录 1. 设置一个 CMakeLists.txt,例如:

        ```cmake
        cmake_minimum_required(VERSION 3.13)
    
        # initialize pico-sdk from GIT
        # (note this can come from environment, CMake cache etc)
        set(PICO_SDK_FETCH_FROM_GIT on)
    
        # pico_sdk_import.cmake is a single file copied from this SDK
        # note: this must happen before project()
        include(pico_sdk_import.cmake)
    
        project(my_project)
    
        # initialize the Raspberry Pi Pico SDK
        pico_sdk_init()
    
        # rest of your project
    
        ```
    
  • 或者通过本地克隆 SDK,但不复制 pico_sdk_import.cmake: 1. git clone 此 Raspberry Pi Pico SDK 仓库 2. 设置一个 CMakeLists.txt,例如:

         ```cmake
         cmake_minimum_required(VERSION 3.13)
    
         # initialize the SDK directly
         include(/path/to/pico-sdk/pico_sdk_init.cmake)
    
         project(my_project)
    
         # initialize the Raspberry Pi Pico SDK
         pico_sdk_init()
    
         # rest of your project
    
         ```
    
  1. Write your code (see pico-examples or the Raspberry Pi Pico-Series C/C++ SDK documentation for more information)

最简单的做法是仅使用一个源文件(例如 hello_world.c)

   #include <stdio.h>
   #include "pico/stdlib.h"

   int main() {
       stdio_init_all();
       printf("Hello, world!\n");
       return 0;
   }

并将以下内容添加到您的 CMakeLists.txt 中:

add_executable(hello_world
    hello_world.c
)

# Add pico_stdlib library which aggregates commonly used features
target_link_libraries(hello_world pico_stdlib)

# create map/bin/hex/uf2 file in addition to ELF.
pico_add_extra_outputs(hello_world)

注意此示例使用默认的 UART 作为 stdout; 如果你想使用默认的 USB,请参阅 hello-usb 示例。

  1. 设置 CMake 构建目录。 例如,如果不使用 IDE:

    $ cmake -S . -B build
    

    cmake -S 标志指示源目录,而 -B 标志告诉 cmake 要创建的输出目录的名称。它不必命名为 "build",你可以将其命名为任何你喜欢的名称。

    当为 Raspberry Pi Pico 以外的板卡构建时,你应该向上述 cmake 命令传递 -DPICO_BOARD=board_name,例如 cmake -S . -B build -DPICO_BOARD=pico2cmake -S . -B build -DPICO_BOARD=pico_w,以便针对该特定板卡相应地配置 SDK 和构建选项。

    指定 PICO_BOARD=<boardname> 会设置各种编译器定义(例如 UART 和其他硬件的默认引脚号),并且在某些 情况下还会启用额外库的使用(例如,为 PICO_BOARD=pico_w 构建时启用无线支持),这些库 在没有提供所需硬件功能的板卡上无法构建。

    要查看 SDK 本身中定义的板卡列表,请查看 此目录,其中包含 每个命名板卡的头文件。

  2. 从你创建的构建目录中构建你的目标。

    $ cmake --build build --target hello_world

    提供给 --build 标志的目录名称必须与之前 cmake 命令中传递给 -B 标志的目录名称相匹配。

  3. 现在你有了可以通过调试器加载的 hello_world.elf,或者可以通过拖放方式安装并在你的 Raspberry Pi Pico 系列设备上运行的 hello_world.uf2

RP2350 上的 RISC-V 支持

有关在 RP2350 上设置 RISC-V 构建环境的信息,请参阅 Raspberry Pi Pico 系列 C/C++ SDK

RISC-V 快速入门

pico-sdk-tools 仓库包含一些预编译的 RISC-V 编译器版本。

例如,您可以使用这些工具在 Raspberry Pi OS 上获得一个可用的 RISC-V 编译器。

wget https://github.com/raspberrypi/pico-sdk-tools/releases/download/v2.0.0-5/riscv-toolchain-14-aarch64-lin.tar.gz
sudo mkdir -p /opt/riscv/riscv-toolchain-14
sudo chown $USER /opt/riscv/riscv-toolchain-14
tar xvf riscv-toolchain-14-aarch64-lin.tar.gz -C /opt/riscv/riscv-toolchain-14

要使用 RISC-V 编译器构建代码,您需要设置几个环境变量并从头运行 cmake。

export PICO_TOOLCHAIN_PATH=/opt/riscv/riscv-toolchain-14/
export PICO_PLATFORM=rp2350-riscv