raspberrypi/pico-sdk
GitHub: raspberrypi/pico-sdk
树莓派官方推出的 RP 系列微控制器 C/C++ SDK,为 Pico 等嵌入式设备提供完整的硬件抽象 API 与构建工具链。
Stars: 4868 | Forks: 1252
# Raspberry Pi Pico SDK
Raspberry Pi Pico SDK(以下简称 SDK)提供了必要的头文件、库和构建系统,
以便使用 C、C++ 或汇编语言为基于 RP 系列微控制器的设备(如 Raspberry Pi Pico 或 Raspberry Pi Pico 2)编写程序。
SDK 旨在提供一套 API 和编程环境,让非嵌入式 C 开发者和嵌入式 C 开发者都能感到熟悉。
设备同一时间只运行一个程序,并以传统的 `main()` 方法启动。支持标准的 C/C++ 库,
同时还提供 C 语言级别的库/API,用于访问 RP 系列微控制器的所有硬件,包括 PIO (Programmable IO)。
此外,SDK 还提供了更高层的库,用于处理定时器、同步、Wi-Fi 和蓝牙网络、USB 以及多核编程。这些库的功能非常全面,您的应用程序代码几乎不需要(如果有的话)直接访问硬件寄存器。不过,如果您确实需要或更喜欢直接访问原始硬件寄存器,您也会在 SDK 中找到完整且带有详细注释的寄存器定义头文件。完全不需要在数据手册中查阅地址。
SDK 可用于构建各种内容,从简单的应用程序、完整的运行时环境(如 MicroPython),再到底层软件
(例如 RP 系列微控制器本身的片上 bootrom)。
整个 SDK 的设计目标是简单而强大。
尚未准备好纳入 SDK 的其他库/API 可以在 [pico-extras](https://github.com/raspberrypi/pico-extras) 中找到。
# 文档
请参阅 [Raspberry Pi Pico 系列入门指南](https://rptl.io/pico-get-started),了解如何设置您的硬件、
IDE/环境,以及如何为 Raspberry Pi Pico 和其他基于 RP 系列微控制器的设备构建和调试软件。
请参阅[使用 Raspberry Pi Pico W 连接到互联网](https://rptl.io/picow-connect),详细了解如何为您的
Raspberry Pi Pico W 编写可连接到互联网的应用程序。
请参阅 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk),详细了解如何使用
SDK 进行编程,探索更高级的功能,并查看完整的基于 PDF 的 API 文档。
请参阅[在线 Raspberry Pi Pico SDK API 文档](https://rptl.io/pico-doxygen)以获取基于 HTML 的 API 文档。
# 示例代码
请参阅 [pico-examples](https://github.com/raspberrypi/pico-examples) 获取您可以构建的示例代码。
# 获取最新的 SDK 代码
GitHub 上 `pico-sdk` 的 [master](https://github.com/raspberrypi/pico-sdk/tree/master/) 分支包含
SDK 的_最新稳定版本_。如果您需要或想要测试即将推出的功能,可以尝试使用
[develop](https://github.com/raspberrypi/pico-sdk/tree/develop/) 分支。
# 快速启动您自己的项目
## 使用 Visual Studio Code
您可以在 VS Code 中安装 [Raspberry Pi Pico Visual Studio Code 扩展](https://marketplace.visualstudio.com/items?itemName=raspberry-pi.raspberry-pi-pico)。
## Unix 命令行
这些说明非常简明,且仅适用于基于 Linux 的系统。有关详细步骤、
其他平台的说明,以及一般性指导,我们建议您参阅 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk)
1. 安装 CMake(至少为 3.13 版本)、python 3、本地编译器以及 GCC 交叉编译器
sudo apt install cmake python3 build-essential gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
2. 设置您的项目以指向使用 Raspberry Pi Pico SDK
* 将 SDK 克隆到本地(最常见):
1. `git clone` 此 Raspberry Pi Pico SDK 仓库
2. 将 [pico_sdk_import.cmake](https://github.com/raspberrypi/pico-sdk/blob/master/external/pico_sdk_import.cmake)
从 SDK 复制到您的项目目录中
3. 在您的环境中将 `PICO_SDK_PATH` 设置为 SDK 的位置,或者稍后将其 (`-DPICO_SDK_PATH=`) 传递给 cmake。
4. 设置一个 `CMakeLists.txt`,如下所示:
cmake_minimum_required(VERSION 3.13...3.27)
# 基于 PICO_SDK_PATH 初始化 SDK
# 注意:这必须在 project() 之前完成
include(pico_sdk_import.cmake)
project(my_project)
# 初始化 Raspberry Pi Pico SDK
pico_sdk_init()
# 项目的其余部分
* 或者将 Raspberry Pi Pico SDK 作为 submodule:
1. 将 SDK 克隆为名为 `pico-sdk` 的 submodule
2. 设置一个 `CMakeLists.txt`,如下所示:
cmake_minimum_required(VERSION 3.13...3.27)
# 从 submodule 初始化 pico-sdk
# 注意:这必须在 project() 之前完成
include(pico-sdk/pico_sdk_init.cmake)
project(my_project)
# 初始化 Raspberry Pi Pico SDK
pico_sdk_init()
# 项目的其余部分
* 或者从 GitHub 自动下载:
1. 将 [pico_sdk_import.cmake](https://github.com/raspberrypi/pico-sdk/blob/master/external/pico_sdk_import.cmake)
从 SDK 复制到您的项目目录中
2. 设置一个 `CMakeLists.txt`,如下所示:
cmake_minimum_required(VERSION 3.13)
# 从 GIT 初始化 pico-sdk
# (注意,这可以来自环境、CMake 缓存等)
set(PICO_SDK_FETCH_FROM_GIT on)
# pico_sdk_import.cmake 是从此 SDK 复制的单个文件
# 注意:这必须在 project() 之前完成
include(pico_sdk_import.cmake)
project(my_project)
# 初始化 Raspberry Pi Pico SDK
pico_sdk_init()
# 项目的其余部分
* 或者将 SDK 克隆到本地,但不复制 `pico_sdk_import.cmake`:
1. `git clone` 此 Raspberry Pi Pico SDK 仓库
2. 设置一个 `CMakeLists.txt`,如下所示:
cmake_minimum_required(VERSION 3.13)
# 直接初始化 SDK
include(/path/to/pico-sdk/pico_sdk_init.cmake)
project(my_project)
# 初始化 Raspberry Pi Pico SDK
pico_sdk_init()
# 项目的其余部分
3. 编写您的代码(有关更多信息,请参阅 [pico-examples](https://github.com/raspberrypi/pico-examples) 或 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk) 文档)
您能编写的最简单程序就是一个单一的源文件(例如 hello_world.c)
#include
#include "pico/stdlib.h"
int main() {
stdio_init_all();
printf("Hello, world!\n");
return 0;
}
并将以下内容添加到您的 `CMakeLists.txt` 中:
add_executable(hello_world
hello_world.c
)
# 添加 pico_stdlib library,它聚合了常用功能
target_link_libraries(hello_world pico_stdlib)
# 在 ELF 之外额外创建 map/bin/hex/uf2 文件。
pico_add_extra_outputs(hello_world)
请注意,此示例使用默认的 UART 作为 _stdout_;
如果您想使用默认的 USB,请参阅 [hello-usb](https://github.com/raspberrypi/pico-examples/tree/master/hello_world/usb) 示例。
4. 设置一个 CMake 构建目录。
例如,如果不使用 IDE:
$ cmake -S . -B build
当为 Raspberry Pi Pico 以外的板卡构建时,您应该将 `-DPICO_BOARD=board_name` 传递给上面的 `cmake` 命令,例如 `cmake -S . -B build -DPICO_BOARD=pico2` 或 `cmake -S . -B build -DPICO_BOARD=pico_w`,以便针对该特定板卡相应地配置 SDK 和构建选项。
指定 `PICO_BOARD=` 会设置各种编译器定义(例如 UART 和其他硬件的默认引脚号),并且在某些
情况下还会启用额外的库(例如为 `PICO_BOARD=pico_w` 构建时的无线支持),如果没有提供所需硬件功能的板卡,这些库是无法
构建的。
有关 SDK 本身定义的板卡列表,请查看[此目录](src/boards/include/boards),其中包含
每个指定板卡的头文件。
5. 从您创建的构建目录中构建您的目标。
$ cmake --build build --target hello_world
6. 您现在拥有了可以通过调试器加载的 `hello_world.elf`,或者可以通过拖拽的方式安装并在您的 Raspberry Pi Pico 系列设备上运行的 `hello_world.uf2`。
# RP2350 上的 RISC-V 支持
有关在 RP2350 上设置 RISC-V 构建环境的信息,请参阅 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk)。
## RISC-V 快速入门
[pico-sdk-tools](https://github.com/raspberrypi/pico-sdk-tools/releases) 仓库包含一些预编译版本的 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
```
标签:Bash脚本, C/C++, 事务性I/O, 客户端加密, 嵌入式开发, 微控制器, 物联网, 硬件驱动, 自动回退, 逆向工具