准备
- 交叉编译工具链 ARM GNU:下载页面
GNU工具链包括了 LD、GCC、G++等交叉编译连接工具
下载完成后下一步下一步安装就可以,注意一下安装路径。
- 树莓派Pico SDK下载: Pico SDK github项目首页
下载后解压,例如我的解压目录为D:\pico\pico-sdk
MinGW工具链(含Cmake、Make、GDB)在2021版本的Clion中默认已经安装,不需要我们再安装配置。
编译连接环境设置
创建C项目
创建新的编译工具链
命名一下新的工具链名称,我这里使用MinGW STM32
。
选择C Complier 和 C++ Complier 为之前安装的ARM GNU工具链中的GCC和G++
Make与GDB保持不变,这里我们只是用Clion编译连接代码,不用Clion Debug所以GDB用不到。
选择 Cmake,修改 Cmake DEBUG配置,Toolchain选择之前创建的 MinGW STM32。
Generator选择 MinGW Makefile
配置PICO SDK的环境变量
变量名为 PICO_SDK_PATH,值为我们之前解压的SDK的绝对路径(我的是 D:\pico\pico-sdk
)
完成后点击Apply并OK。
CMakeLists.txt
找到 pico-sdk 中pico_sdk_import.cmake
文件,复制到项目根目录
修改 CMakeLists.txt
如下:
cmake_minimum_required(VERSION 3.21)
# initialize the SDK based on PICO_SDK_PATH
# note: this must happen before project()
include(pico_sdk_import.cmake)
project(picoled C CXX ASM)
set(CMAKE_C_STANDARD 11)
# Initialize the SDK
pico_sdk_init()
add_executable(picoled main.c)
target_link_libraries(picoled pico_stdlib)
# create map/bin/hex/uf2 file in addition to ELF.
pico_add_extra_outputs(picoled)
- 在
project
行前增加include(pico_sdk_import.cmake)
导入PICO的SDK。 - Project中增加
CXX ASM
,这因为SDK需要使用C++和汇编。 - 初始化SDK
pico_sdk_init
。 - 可执行程序链接上
pico_stdlib
库。 - 添加额外输出
pico_add_extra_outputs
,用于生成PICO的可执行文件,否则只有DEBUG的.efl
文件。
完成后删除原有cmake-build-debug-stm32
文件夹
重新加载。
重新加载后可以看见,项目目录中增加了pico-sdk
,在CMake的提示消息中出现了一个警告,这里我们可以忽略该警告。
LED Demo
进入main.c
文件编写LED闪烁的程序如下:
#include "pico/stdlib.h"
int main() {
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true){
gpio_put(LED_PIN, 1);
sleep_ms(500);
gpio_put(LED_PIN, 0);
sleep_ms(500);
}
}
上面程序就是使用PICO上的LED等500ms闪烁一次,完成后我们点击编译。
可以在cmake-build-debug-stm32
目录中找到该可执行文件picoled.uf2
。
picoled.elf
需要DEBUG调试启动
运行
先按住 PICO Pi 的BOOTSEL按键不放,然后插上USB。
在PC上弹出一个127M大小新的磁盘。
打开该磁盘,将上一步编译可执行文件picoled.uf2
放入该磁盘中。
若程序正常,复制成功后该磁盘将会断开连接,Pico Pi将会自动重启执行我们的程序。
参考文献
[1]. 树莓派 pico中文站 . https://pico.org.cn/
[2]. github . raspberrypi . pico-sdk . https://github.com/raspberrypi/pico-sdk
[3]. csdn . 人类高质量码农. . RaspberryPi Pico CLion开发环境配置 . https://blog.csdn.net/m0_53777801/article/details/112982045