树莓派Raspberry Pico RP2040 开发环境配置完全缝合终极版C-SDK
创始人
2024-03-20 10:37:32
0

树莓派Raspberry Pico RP2040 开发环境配置

总览)

  • 树莓派Raspberry Pico RP2040 开发环境配置
    • 1、MicroPython环境
    • 2、PlatformIO环境
      • 1、一般的Arduino环境
      • 2、基于pico-sdk的裸环境
    • 3、基于IDE配置
      • 3.1 基于VisualGDB的Visual Studio创建工程
      • 3.2 基于Embedded Studio
        • 使用方法
          • 安装SDK
          • 新建工程
          • 仿真下载调试
            • J-link
            • Openocd
      • 3.3 基于RT-Thread Studio
        • 使用方法
      • 3.4 Keil MDK
    • 4、基于官方C语言环境搭建
      • 4.1 官方文档的方法
      • 4.2 Windows下的PICO环境配置
        • 1、安装各类工具链
          • 1、visual studio
          • 2、使用MinGW替代visual studio的方法
        • 2、配置路径SDK
        • 3、编译例程测试
          • 如配置的是visual studio的编译器
          • 如果配置的是Mingw
          • 解释一下上面的语句
        • 4、生成自己的工程并编译烧录
          • 使用pico-project-generator生成工程
        • 5、官方方法工程配置总结
      • 4.3 配置自己的IDE
        • 1、CLion
        • 2、VScode作为IDE
          • 使用vs的编译器:
        • Kdevelop:
        • Kate
        • Codelite
        • Eclipse
      • 4.3 Linux环境的配置
        • 4.3.1 基于WSL安装PICO C-SDK环境
        • 下载例程编译例程
        • 使用pico-project-generator生成自己的工程
  • 全局总结
  • swd下载方法
  • 开发方法总结:
    • 1、如果不需要调试功能
    • 2、需要调试的开发方法
      • 2.1 自调试
        • 基本使用方法:
          • GDB调试
        • 基于VSCode的自调试
      • 2.2 使用外部debug工具
        • 2.2.1 买一个rp2040做一个picoprobe.
        • 2.2.2 其他的daplink或者jlink
          • 使用IDE来调试
          • 使用pico-generator生成工程

写这个不是为别的,网上的配置方法大多数是照着官方给的方法一抄,然后也不说这就是手册里面的,我最开始看的手册还没更新树莓派以外平台的写法,所以蒙圈了好久,现在总结了方法和选择记录下来,当然还有一些东西没来得及琢磨,之前都是喜欢开箱即用的懒人,pico这个官方给的配置方法(C-SDK)实属不当人。首先声明,网上的方法,大部分都是从getting-started-with-pico.pdf 这个手册里面照抄的,实在是很恼火,包括大部分人都是直接抄到使用picoprobe作为仿真器就算了。
最后面记录了一些问题没整理,写完了再更新。
下面我会写出详细的配置说明。

先在这里解释一下公共的部分:

1、关于调试使用的仿真器,官方做了一个特殊的daplink,叫做picoprobe, 就是直接用pico的板子加载一个dap的固件。我目前还没试不知道普通的cmsis-dap的配置能不能用,在Windows下如果用picoprobe需要使用Zadig为其安装驱动为libusb-win32。(不知道现在还需不需要手动安装驱动);而对于最常见的cmsis-dap来说,应该需要v2固件的才能调试,实测v1固件的都不行,我目前能用的是pico-debug固件加载的自调试,还有wch-link.

2、默认配置了环境变量来说的,如果有的地方没有提到什么程序加入了环境变量就用了,那就是忘了说,除了说了可以不加,肯定要加的。

3、UF2文件的下载方法

在rp2040运行前按住boot按键然后运行,最简单的方法是按住按键然后上电就进入boot模式了,然后电脑上就会出现一个叫做RP2-PI的硬盘驱动器,右键UF2文件,点发送到树莓派对应的驱动器。

复杂一点,如果不想重新上电可以拉低Run引脚后按Boot,然后释放Run引脚,也可以;还有软件进入的方法。

1、MicroPython环境

这个虽然简单,但是用python我不是很认可,简单说一下

1、Raspberry Pi Documentation - Microcontrollers,选择Getting Start with MicroPython,下载uf2固件后烧录到rp2040上,打开设备管理器会发现多了一个COM端口(就是串口)。下载链接:https://micropython.org/download/rp2-pico/rp2-pico-latest.uf2

2、下载Thonny IDE, 打开Thonny,右上角点击切换至一般模式,然后点击视图,选择:Shell 变量 文件,当然还有别的,这几个最常用。

3、Thonny:工具-设置-解释器-选择Raspberry Pi Pico的解释器,然后选择串口端口,这个端口可以看设备管理器多出来的那个端口就是的。也可另外连板子上的串口,波特率是115200

4、进入shell直接依次执行python语句

from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)

5、写python文件

在Thonny里面编辑文本后保存的时候选择保存到pico就行了,开机默认自动运行main.py .

6、资料:
Raspberry Pi Pico Python SDK Raspberry Pi Documentation - MicroPython

7、支持PIO,不支持多核。好处就是简单,导入包比较容易。

2、PlatformIO环境

1、一般的Arduino环境

安装方式:

板子里面搜rp2040或者rasp,安装对应的平台。

文档:

Using the Raspberry Pi Pico SDK (PICO-SDK) — Arduino-Pico 2.6.2 documentation

功能:

支持arudino框架,配置有arduino风格的函数。

也支持在arduino框架下直接使用pico-sdk的函数,看文档应该是支持pio,支持多核。

下载调试:

一般会自动选择调试工具,如果要更改就在ini文件里面添加

upload_protocol = picotool
debug_tool = cmsis-dap

上面的参数可以改成cmsis-dap, jlink, picotool, raspberrypi-swd

picotool就是uf2上传工具,raspberrypi-swd就是用picoprobe.

编译后在目录下.pio/build下有uf2文件,首次手动上传arduino框架的uf2固件之后后面就可以直接用platformio的上传功能,不用拔电上传了,盲猜固件内置了进入boot的代码,观察到确实运行时候点上传会进入大容量设备状态,但是实测接着上传不成功。。。(别的帖子说是可以的).

如果用openocd调试,点击侧边的调试,有一个pio debug的选项。

支持cmsis-dap, jlink, picotool, raspberrypi-swd调试,不过我用dap v1的时候也不好使 ,自调试也不好使,别人说用官方的picoprobe是可以正常调试的。Cannot debug Pi Pico with CMSIS-DAP - “CMSIS-DAP command CMD_DAP_SWJ_CLOCK failed” - PlatformIO IDE - PlatformIO Community

实测使用WCH-link可以调试,能正常显示双核。要点左边的调试,显示为PIO debug

不过不能用自调试来搞。

openocd也可以从这下载:Download OpenOCD for Windows (gnutoolchains.com)

2、基于pico-sdk的裸环境

Wiz-IO/wizio-pico: Raspberry Pi Pico development platform for PlatformIO (github.com)

安装方式

  • PIO Home > Platforms > Advanced Installation
  • paste https://github.com/Wiz-IO/wizio-pico
  • 点击INSTALL

功能

支持原生C-SDK编写方式。所以功能都能支持。

下载支持cmsisdap picoprobe uf2,官方文档里面写的是要用picoprobe和cmsis-dap,目前只支持Windows。

下载调试:

下载默认是uf2下载,需要rp2040先手工进入BOOT模式,稍微有点麻烦,参考后面的调试方法里面的一键进入BOOT.

platformio.ini 里面添加对应的方式,比如

upload_protocol = picoprobe
debug_tool = picoprobe

上面的值可以改成:cmsis-dap picoprobe, uf2

实际上这个框架里面估计也就picoprobe好使,实测选啥都会变成uf2上传。

picoprobe.uf2 have in tool-pico-openocd folder

3、基于IDE配置

下面这几个都很方便,因为他们都提供了集成的SDK下载和模板工程的创建,不需要官方那一套配置。

3.1 基于VisualGDB的Visual Studio创建工程

先安装visualGDB,这是一个给VS提供的跨平台包,关键词:VisualGDB的基本使用。

然后按照下面的方法,新建工程选模板,下sdk就好。

Developing Raspberry Pi Pico Projects with Visual Studio – VisualGDB Tutorials

但是VisualGDB是收费的,告辞,看起来很简单,我没试过。

3.2 基于Embedded Studio

下载链接:SEGGER - The Embedded Experts - Downloads - Embedded Studio

社区免费,支持Jlink, GDB server,其中gdb server可以选 jlink openocd pyocd st-link

自带仿真器,自带rp2040例程,不过他的例程似乎都是干寄存器,似乎没有引用官方的pico-sdk,不过他内置的RP2040 pico Samples的历程是包好了SDK的,可以直接复制。就是程序还是没用SDK的内容罢了。相对来说编译比官方杂七杂八的快多了。

而且跨平台,工程配置很方便。

使用方法

安装SDK

点Tools-Package manager,搜pico,点一下,然后点next就安装好sdk了。

新建工程

点Project-Add project,选树莓派的第一个pico是官方的板子的,程序里面会给个bsp,不带pico就是裸片,区别不大。

然后是工程配置:

目标处理器选0或者1,对应核心,

编译器可以选gcc或者segger,

剩下一些配置默认就行。

然后编译,debug。

默认没有生成uf2文件,没找到在哪里生成,也许不支持UF2这种方法。

仿真下载调试
J-link

不支持V10以下的Jlink。。。也有的说能支持,但是反正我的Jlink Lite V9显示不支持multi-drop,也有人说需要Jlink v11才行。

[SOLVED] RP2040 Support - J-Link/Flasher related - SEGGER - Forum

Openocd

1、在命令行里面开一个openocd server等待连接,如:

openocd -f board/pico-debug.cfg

2、配置工程调试选项

右键工程 - option - debug - debugger- 选gdb server,然后点gdb server选项,选openocd。

如果自己开命令执行的话就这样就行了。

实际上第一步开一个openocd的手动过程可以省掉,

可以勾选工程选项里面debug下面的 GDB Server-auto start gdb server 为yes 。

然后填写Debug > GDB Server > GDB Server Command Line

openocd.exe -f board/pico-debug.cfg

这个openocd要加入环境变量,或者使用绝对路径。

这有个工程模板:pico-demos/pico-ses at master · majbthrd/pico-demos (github.com) 不过似乎没必要用,这个模板很老了,估计是还不支持的时候做的,也是全都是干寄存器。按照最上面那样配置就可以了。

参考:

在烧入配置中选择OpenOCD,用DAP仿真器进行下载。 - Embedded IDE Forum (em-ide.com)

实测单核使用自调试的单核配置,多核使用WCH-link使用标准的配置,都可以正常调试、查看变量寄存器。

只是如果使用单核的配置,使用外部daplink的时候就不要让它自己启动openocd,不然连接不上。

3.3 基于RT-Thread Studio

国产软件,评价很高,社区版免费。下载链接:https://www.rt-thread.org/download.html#download-rt-thread-studio

如果不介意用rt-thread的话,那么可以去使用rt-thread studio(因为目前他支持rtt的工程使用官方给sdk模板)

支持jlink daplink,不过好像都不怎么好使。。

要登陆。。。有点蠢,bug也还不少。。

使用方法

先下载SDK, 随便开个窗口或者新建工程点进下载SDK的界面。

对于Pico,只能创建rtt工程,显示三种调试工具,点下载程序的小箭头可以改下载方式。

openocd调用的是pyocd,实测我手上的这个daplink v1不支持,已经测过ok的自调试dap是v2的也不好使,所以不知道好不好使

TODO:测试一下外部仿真器V2

jlink也是需要jlink支持,我的版本不够。

stlink不可能支持的。。只是显示出来了。

要先点一下调试配置,改一下可执行程序的位置和名称,默认的位置不对。。。点一下搜索项目按钮,选elf那个文件。(目前的版本是这样)

有人使用picoprobe替换驱动为libusb后用来调试(没看见他发调试成功的图啊)我也没成功过,所以不知道调试行不行。

参考链接:RT-Thread-在 RT-Thread Studio 中使用树莓派 Pico 开发板RT-Thread问答社区 - RT-Thread

3.4 Keil MDK

GorgonMeducer/Pico_Template: An MDK template for Raspberry Pi Pico (github.com)

用这个模板,看起来还行,我就不测试了,不喜欢Keil。

MDK震惊!树莓派Pico的调试还能“单体自助”的? - 腾讯云开发者社区-腾讯云 (tencent.com)

git clone https://github.com/GorgonMeducer/Pico_Template .git submodule update --init

4、基于官方C语言环境搭建

4.1 官方文档的方法

网上找的方法绝大多数都是基于getting-started-with-pico.pdf这个手册上的方法,最开始这个手册只更新了基于树莓派系统的配置,直接执行setup脚本就行了。

官方的配置里面很多配置文件问题一堆,比如上面的setup脚本,很可能自己的环境用不了,如果遇到问题重新git pull是最有可能能解决问题的。

包含以下几个流程:

1、下载例程、SDK、模板生成工具

安装openocd https://www.rustyelectrons.com/posts/3-rp2040-development-with-wsl/

git clone https://github.com/raspberrypi/pico-project-generator.git
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk/
git submodule update --init
cd ..
git clone -b master https://github.com/raspberrypi/pico-examples.git

这里配置更新子模块如果报错,就更新到最新的SDK,大概是之前写的有问题。找不到子模块什么的。

2、编译

后面详细说。

cmake …

make

3、下载调试

调试参考getting-started-with-pico.pdf 5.3章节 第六节

swd的使用,调试也就是基于GDB的调试。

手册上的第七节讲了vscode的使用

4.2 Windows下的PICO环境配置

目前我的环境是Windows11,参考官方文档getting-started-with-pico.pdf:9.2. Building on MS Windows

1、安装各类工具链

cmake

官方生成器是基于cmake构建的,勾选添加环境变量for all users。实际上就是系统环境变量。

gcc-arm-none-eabi:

Arm GNU Toolchain ,这里没啥特殊要求,可以下最新的。安装完了之后手动勾选添加到路径,还要检查一下能不能直接在cmd里面使用arm-none-eabi-gcc命令,否则说明他添加的路径有问题,手工改一下(现在的版本应该直接可用)

python

后面用他的生成器要用。勾选环境变量,解除长路径限制。

git:

不用说。

Windows下的编译器

1、visual studio

调用vs的nmake,一个是要用他的命令环境,然后只是因为这个环境包含了nmake的环境变量。

不过即使添加了下面的环境变量,nmake还是差环境,工程编译会报错。

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\bin\Hostx64\x64\C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\bin\Hostx64\x64\

需要从Visual Studio 2022 Developer Command Prompt这里打开,具有内置的环境。

2、使用MinGW替代visual studio的方法

实际上vs是可选的,只是官方手册里面提供的方法是VS,实际上启动vs的环境非常不方便。

可以用mingw的minge32-make来实现这一步。

下载MinGW,把其bin目录加入环境变量。

目前mingw新的是mingw-w64,下载网址: MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

点下面的MinGW-W64 GCC-8.1.0标题下面的包,在线安装包压根连不上。

  • x86_64-win32-seh这个表示64位pc windows系统 seh错误处理的包(具体怎么选可以搜一下mingw-w64的安装)

(mingw32下载链接:https://osdn.net/projects/mingw/# 上面是旧版mingw32,2017年就停更了,可能也能用。)

p.s.

旧版的mingw64可能编译报错,编译的时候可能会出现类似于'C:/Program' 不是内部或外部命令,也不是可运行的程序这样的问题。

这里最终用刚刚下载的mingw -w64。

2、配置路径SDK

最前面下好了pico-sdk,examples,还有generator,把pico-sdk放到自己指定的位置,然后把目录加到环境变量里面,名称是PICO_SDK_PATH.

使用powershell

setx PICO_SDK_PATH "youpath\pico-sdk" 

或者Windows下面直接搜path,就能找到编辑系统环境变量的选项。

(其实这里没加也没关系,有别的方法,但是最好加上,因为generator默认用的是环境变量配置)。

当然也可以临时配置环境变量,但是没必要这样做:

在powershell内执行

$env:PICO_SDK_PATH=pico-sdk的路径

3、编译例程测试

其实这个步骤不是必须的,但是最好测试一次,同时也演示了不配置IDE怎么编译。

如配置的是visual studio的编译器

也就是官方手册指出的方法,那么

打开Visual Studio 2022 Developer Command Prompt:

快捷方式或者WindowsTerminal打开(Windows Terminal点加号旁边的下拉,里面有选项),打开之后会提示

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.7.2
** Copyright (c) 2020 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86_x64'

类似于这样表示加载了vs的环境,实际上也可以通过执行vcvars64.bat这个文件来加载环境。

从刚刚打开的命令行或者powershell,进入pico-example目录:

上一步可以选使用cmd还是powershell,如果用cmd,工程切换到别的盘先要换盘符,然后cd进去;

powershell可以直接进去。

然后,在build目录里面cmake,取上层目录的cmakelist.txt

mkdir build
cd build
cmake .. -G "NMake Makefiles" 

这里正常能找到对应sdk、toolchain的路径,不会报错。(前面都配置好PICO-SDK和arm-none-eabi-gcc.exe的环境变量了)

然后cd到pico-examples/build目录下的blink(上面的步骤做完了已经在build里面了),

cd blink
nmake

这时候看编译信息,可以看到正常生成的信息。

进入build/blink,右键xxx.uf2, 选择发送到RPI-RP2这个驱动器,发送完会自动运行。

如果配置的是Mingw

直接在build目录打开shell,指定生成格式的makefile(不需要从那个VS的环境进)

cmake .. -G "MinGW32 Makefiles"

然后执行mingw32-make就可以编译了。

p.s.

如果先用了nmake,再换mingw32-make,直接使用cmake -G "MinGW32 Makefiles"生成makefile,会报错:

与之前的cmake generator不符,需要将build下的cmakecache文件删掉,再指定MinGW Makefiles.(也可以使用cmake-gui.exe直接手动切换)。不过实际操作用generator生成模板的时候可能有好几个cmakecache.txt要删除,不然还是会报错。

解释一下上面的语句

这里cmake是生成make工具对应的makefile。

cmake --help可以看到很多指令,里面有各种generator的名称,注意大小写)

也有人用Ninja,但是那需要ninja的构建文件,同mingw步骤。

以上就是标准的例程配置方法。

4、生成自己的工程并编译烧录

使用pico-project-generator生成工程

(这里提前说一下,如果生成有问题,首先更新到最新的python文件,与有的早期教程不同,现在生成器在windows下面没有问题,能正常使用,不需要改动python的源码等步骤(是新版的python没有这个问题,3.10,或者win11,不知道))

进入pico-project-generator目录下,右键shell,运行:

python ./pico_project.py --gui
#或者
python ./pico_project.py -g

这里建议找到pico_project.py 647行的self.locationName.set(os.path.abspath(os.getcwd()),改成:

self.locationName.set(os.path.abspath(os.path.join(os.getcwd(), "..")))

这样默认路径是pico_project.py的上层目录而不是里面。

然后建议去掉开头那个logo,,,屏幕太小了最后点不到,就是下面这两行。

self.logo = tk.PhotoImage(file=GetFilePath("logo_alpha.gif"))
logowidget = ttk.Label(mainFrame, image=self.logo, borderwidth=0, relief="solid").grid(row=0,column=0, columnspan=5, pady=10)

这样就打开了生成器,然后按照需要勾选内容。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XF54OVzk-1670246830188)(D:\MyProjects\4_MyOutputs\学习内容的输出\单片机开发环境的配置\RP2040开发环境搭建\pico-project-generator.png)]

在前面配置的编译器是vs的编译器的情况下,

这里如果勾选Run build afer generation,那么需要先进入Visual Studio 2022 Developer Command Prompt的环境,然后打开这个生成器,不然缺环境,但是一般没有这个必要。

生成之后,进入工程目录下,只有一个 工程名.c 文件,main函数就在里面,编写这个文件就可以了。

如果只有这一个.c文件,也就是cmakelist不需要改动,那么直接从Visual Studio 2022 Developer Command Prompt进入工程下build目录,执行nmake就行了。

如果添加了其他的文件,就修改cmakelist.txt , 然后重新执行cmake -G “NMake Makefiles”,然后nmake就好.

在前面配置的编译器是MinGW的情况下:

直接执行mingw32-make 就可以编译了,更新makefile的话就是,cmake -G "MinGW32 Makefiles"

至于cmakelist.txt怎么用,参考文档xxxxx

TODO:这里找个好用点的cmake的文档。

这时候,uf2,elf文件都在工程下build里面。

以上就是标准的工程创建和配置流程。

这里得注意,mingw的优先级高于vs,所以配置了后者的话,生成器优先生成基于mingw的工程,当然了,可以改也可以自己切换。但是mingw挺好的。

5、官方方法工程配置总结

1、配置好环境,下好官方sdk和例程还有生成器,配置好环境变量。

2、使用生成器生成工程

3、使用nmake或者make(mingw32-make)编译

4、编译得到的uf2可以直接从usb启动,得到的elf可以使用swd烧录或调试(调试需要之前就编译参数指定为debug),bin文件可以烧录到flash

5、注意工程路径不要有中文。

4.3 配置自己的IDE

当然了,直接打开文件夹里面文件编辑编译,配置文件也不方便,编译烧录调试更不方便,添加文件还要自己写cmakelist(有自动扫描的方法,后面说)在生成了工程的前提下,选择一个IDE打开工程方便编辑。

除去前面说的已经官方集成模板的IDE,基于上面配置的工程,这里选择使用CMakelist作为配置的ide。

QtCreator

Netbeans

KDevelop Kdevelop使用CMake作为其主要的项目配置方式。除此之外还支持qmake、makefile

codelite

2、除此之外

CMake能够生成一些IDE的配置文件(如Visual C++、CodeBlocks、XCode),没见过这么玩的,也没必要,这里就不折腾了。

B、配置方法

如果前面没有配置系统环境变量,那么需要在IDE内配置环境变量:

PICO_SDK_PATH=D:\MyProgramData\MCU_SDK\pico-sdk

PICO_TOOLCHAIN_PATH=C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin\arm-none-eabi-gcc.exe

(其实这个arm gcc电脑上各个软件内的都下了好几个了,从platformio共用一个都行)

1、CLion

其中最有名的可能是CLion了,官方start文档也给出了怎么配置.

官方文档:getting-started-with-pico.pdf 10.2. Using CLion

打开pico-example,设置,构建、执行、部署,CMake,点环境:增加用户环境变量。

打开对应工程文件夹就可以点锤子构建了。

文件的路径,来源,函数来源都显示很清楚,引用的sdk也能直接显示出来。

这里贴个帖子不再赘述:

调试参考别的配置openocd的资料。

CLion 中开发 RaspberryPi Pico | St.Lee的个人站 (stlee.tech)

他确实方便,直接打开配置好的文件夹,配置一下变量和openocd就可以用了。

看不到printf puts的输出。

编译比vscode快不少。

2、VScode作为IDE

通过插件支持,需要安装CMakeTool cortex-debug

使用vs的编译器:

前面使用生成器的时候,勾选IDE Options上的创建vscode project,会自动生成vscode的配置.vscode

首先,使用visual studio的命令行Developer Command Prompt for VS 2022,或者powershell也行,前面说了怎么打开了。

输入code打开vscode(vscode安装的时候默认添加到环境变量里面了),这个实际上是%comspec% /k "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"来进入命令,

说个简单点的启动方法:

找到电脑上的C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat 如果是32位机器就选后缀32的(现在应该不会了吧)然后打开,然后执行code。

可以写成脚本:

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
code

然后直接点击运行就行了。

安装CMake插件

打开设置,搜索 CMake Tools Configuration

找到Configure Environment, 添加上面两个环境变量,如果已经有配置好的系统环境变量就不需要了。

找到CMake Tools Configuration - Generator,设置为NMake Makefiles

打开项目文件夹,第一次打开的时候会提示选择工具包,选错过了也没关系,就在最下面的底边栏,点一下选择有arm-none-eabi的这一项。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQ84EBCJ-1670246830191)(file:///D:/MyProjects\4_MyOutputs\学习内容的输出\单片机开发环境的配置\RP2040开发环境搭建\底边栏选择工具箱.png?msec=1670169712467)]

安装插件:cortex-Debug

打开文件夹之后,按F7是Cmake的build,F5是cortex-debug的调试,都能编译,后者会启动openocd。

但是只是这样的话和之前输命令相比也没更方便:

使用mingw

CMake Tools Configuration - Generator 填写MinGW Makefiles

其他工具

cmake --help

可以看到有很多参数:

Kate - NMake Makefiles

Kate - MinGW Makefiles

CodeLite - MinGW Makefiles

或者Ninja

我放到了D:\MyProgramData\MCU_SDK\pico-sdk下,

可以直接从Windows terminal里面加号打开Visual Studio 2022 Developer Command Prompt

arm gcc的目录最开始那个版本自动添加的path不知道为什么没有添加bin这个目录,所以找不到可执行文件,新版的armgcc自动添加的path就是正确的。然后一个比较诡异的事情就是,添加环境变量之前打开的Windows terminal不能自动引用后来添加的环境变量,即使同一个窗口点加号打开更多的cmd或者shell。。。必须要新开一个Windows terminal

前面环境变量添加好了之后后面会自动找到正确的编译器和sdk。

参考链接

Raspberry-Pi-PICO系列–第四篇 开发环境搭建-Windows系统 + Visual Studio Code开发_coder.mark的博客-CSDN博客

树莓派学习笔记4-pico的vscode c/c++工程配置 - 知乎 (zhihu.com)

参考:(104条消息) Raspberry-Pi-PICO系列–第一篇 初识RP2040_coder.mark的博客-CSDN博客_rp2040

developer Command Prompt for VS 2022

%comspec% /k “C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat”

Pico CDC/ACM USB 串口在Windows10、linux、Mac上是自动支持的,在win7上可能需要抓换usb驱动,下载Zadig 安装相应的驱动程序。选择 USB ID2E8A并使用驱动程序。USB Serial (CDC)

这里关键是配置.vscode下的配置json文件。

launch.json

自动生成的首先是gdb的路径没有适配系统,再Windows下要改成arm-none-eabi-gdb

然后configFiles的内容根据自己用的仿真器修改。

setting.json

而其他的内容在之前已经配置好环境变量的情况下不用再添加了。

cmake的几个按钮它生成的时候隐藏了,实际上确实没啥用。

然后不希望写到全局的设置可以放到这里,比如

//  "cortex-debug.armToolchainPath": "",//  "cortex-debug.openocdPath.windows": "D:\\MyPrograms\\1_DevelopTools\\MCU_Tools\\openocd-04887d3b6-i686-w64-mingw32\\bin\\openocd.exe",//  "cortex-debug.openocdPath": ""// "cmake.generator": "MinGW Makefiles"// "cmake.generator": "NMake Makefiles"

extensions.json

就是推荐的插件,不用改。

缺点是启动相当慢,差不多要两分钟。实际上配置了cmake或者cortex-debug之后就不用自己写task.json了,还算方便。

启动调试快捷键是ctrl+shift+D或者F5 ,F7只能编译,所以自动生成的配置文件把自带的cmake的调试编译隐藏了,因为不方便配置为打开openocd后调试。

不知道官方的方法为什么这么多东西每次都要编译一次,编译本身也很慢。

同样看不到printf puts的输出。

Kdevelop:

Download | KDevelop

更新有点慢,上次更新还是两年前。。怎么用Windows编译器的文档上次更新还是六年前。。。

然而,这个IDE没啥用,添加文件还是要自己写cmakelist。。。。并没有方便,虽然cmakelist可以图形管理。。
甚至编译后生成的文件都要重新加载才能显示。

所以,打开仍然需要从vs命令行打开,当然如果用mingw的话就不需要了。

debug配置方法:

运行-配置启动-然后更改gdb选项就可以用gdb调试了。

for the target set it to executable and the path to build/your-project-name.elf

Click on the Debug part of the launch configuration and set the debugger executable to /usr/bin/arm-none-eabi-gdb

Set the Run gdb script to the script created in the previous step. Click apply.

脚本内容:

target remote localhost:3333# monitor arm semihosting enable
mon reset halt
# openocd must be running in the correct dir for the relative paths to work# Flash
mon flash write_image erase unlock build/your-project-name.bin 0x08000000
mon verify_image build/your-project-name.bin 0x08000000
mon reset halt# Not sure why but this is needed for KDevelop
file build/your-project-name.elf
load
mon reset halt
disconnect
target remote localhost:3333

然后:

openocd -f interface/stlink.cfg -f board/stm32h7x3i_eval.cfg

下面是参考资料:

KDE/kdev-embedded: Plugin for KDevelop to support the development of embedded systems (github.com)

Use KDevelop with OpenOCD and mbed-os - CodeLV

放弃,我这里会提示elf不是启动文件,上面的教程是kdevlop3.

至于那个插件,是七年前的了。

安装,工程-打开/导入-选择刚刚生成的工程文件夹,点构建就可以构建了。
使用yay -S gdb-multiarch 安装gdb-multiarch

linux下可以直接打开工程并构建,linux下的版本也更新,5.9到了。

Kate

这个编辑器倒是算是正常。
不过仍然是linux下比较正常,windows下有bug,没有默认的gdb前端插件,所以没法调试,可能可以写插件。。。
使用yay -S gdb-multiarch 安装gdb-multiarch
https://aur.archlinux.org/packages/gdb-multiarch
如果报错patch的话就显pamac install patch

点下面的构建
构建插件编写为:
cd ./build && make
添加一个cmake构建命令
cmake -G “Kate - Unix Makefiles”//或者Kate - MinGW Makefiles
添加一个构建cmake并编译命令
cmake -G “Kate - Unix Makefiles”&&cd ./build && make

配置GDB
点下面的调试
GDB 设置
高级设置
改成远程TCP
自定义初始化脚本:

仍然不能解决添加文件的时候要手动改cmakelist的问题。

Codelite

这个IDE也是可以基于Cmake的,下面这是个stm32的配置
https://blog.csdn.net/u012750409/article/details/52516653

但是也可以直接用cmake -G "CodeLite - MinGW Makefiles"来转

实测能用,效果还不错,但是配置调试比较麻烦。利用外部工具执行烧录还是可以的。

同理:

CodeBlocks - MinGW Makefiles

Eclipse

Eclipse CDT4 - MinGW Makefiles

参考官方教程,很详细。如果不想单独下个eclipse的话,看看电脑上哪个基于eclipse的IDE不是阉割的可以直接拿来用。

4.3 Linux环境的配置

由于各种原因,Linux下配置简单一点。

4.3.1 基于WSL安装PICO C-SDK环境

如果是Windows ,就安装WSL,参考笔记wsl安装

https://www.cnblogs.com/tcjiaan/archive/2021/09/19/15307912.html

https://forums.raspberrypi.com/viewtopic.php?t=303209

假设这里已经安装好了前面对应的pico-sdk,example,generator,

还有需要的cmake make git armgcc:

sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc+±arm-none-eabi-newlib make

然后配置环境变量

cd pico-sdk
export PICO_SDK_PATH=`pwd` 

下载例程编译例程

和windows的步骤类似,简单点

下面是废弃步骤做个记录:

编译的时候提示cmake版本不够,直接编译新版的cmake安装。。。

sudo chmod 777 -R cmake-3.25.0-rc1/

  1. ./configure

  2. make

  3. sudo make instal

sudo ln -sf /usr/local/bin/cmake /usr/bin 如果有老版本的cmake

然后编译cmake的时候发现没有g++。。。。。这个环境怎么什么都没有。。。

然后发现是国内源的问题,先换回官方源了。。。

正确步骤:

找到正确的源。。。

编译例程

git clone https://github.com/raspberrypi/pico-examples.git
cd pico-examples
mkdir -p build
cd build
cmake ..
make

到相应目录下找到 *.uf2 文件,将其复制到 RPI-RP2 的移动硬盘 即可完成下载。

使用pico-project-generator生成自己的工程

和Windows下类似,只不过如果是WSL下需要先需要手工安装tkinter(一般不需要)

sudo apt-get install python3-tk

使用python启动生成器。

python3 pico_project.py --gui

生成的工程进入build

cmake …

就可以编译了,直接make。

全局总结

不是我说,官方方法是真他娘的复杂。

免费且最省事儿方法:

1、RTT studio -缺点,要登陆。。。

2、segger embedded studio -免费,知道怎么写程序的话可能是最省事儿的。

免费省事儿且可商用的方法:

1、platformIO

(arduino就是个框,引用函数都可以写一样) ,而且有别人做的包(https://github.com/Wiz-IO/wizio-pico),可以使用裸环境。

缺点,platformIO容易崩溃,能用就不要动配置。

不省事,免费,能用,原生C SDK:

1、VScode 凑合用,配置完了也能调试

2、kdevelop 主要是这个软件不争气,起码作为ide管理文件还是方便的,基本上没法调试还不如kate

不免费但是好用:

Clion。

swd下载方法

openocd -f interface/raspberrypi-swd.cfg -f target/rp2040.cfg -c “program blink.elf verify reset exit”
openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c “program blink.elf verify reset exit”

开发方法总结:

1、如果不需要调试功能

(起码目前SWD连接体验很差,jlink有版本要求,daplink也不一定能用,picoprobe要单独做一个或者买一个)

先用arduino框架开发个大概,因为arduino框架不需要掉电重启进入boot模式,然后切换到wio的包用裸模式开发,这应该是体验最好而且免费开源的方法。缺点是编译比较慢。

至于其他的IDE即使不调试,也不一定好用。

一键下载uf2

上图所示,接线非常简单,只需要将GND和RUN引脚连接在一起,在需要更新固件时,我们只要按住我们刚添加的RESET按钮,BOOTSEL按钮;释放RESET按钮,然后释放BOOTSEL按钮,即可访问pico的flash,然后更新固件!

步骤:

按住我们刚添加的RESET按钮和BOOTSEL按钮释放RESET按钮释放BOOTSEL按钮拖动文件更新固件

参考:https://blog.csdn.net/qq_35181236/article/details/115297790

2、需要调试的开发方法

2.1 自调试

单核开发,不需要调试USB的情况下可以使用。

优点:不用说,只需要一根线就能调试了。

代价是占用16k内存,占用USB,占用一个核心。不过实际上,如果USB的功能最后再加进去,也可以下载进去,开发另外一个核心同理,只是不能调试了。

基本使用方法:

下载 pico-debug-gimmecache.uf2 固件到rp2040,然后命令行

openocd -f board/pico-debug.cfg

回显会提示:

Warn : rp2040-core0.cfg configuration file is deprecated and will be removed in the next release. Use following parameters instead: -c 'set USE_CORE 0' -f target/rp2040.cfg

这个pico-debug.cfg实际上就是

source [find interface/cmsis-dap.cfg]adapter speed 4000set CHIPNAME rp2040source [find target/rp2040-core0.cfg]

等效于

openocd -f interface/cmsis-dap.cfg -f target/rp2040-core0.cfg -c  'adapter speed 4000' -c 'set CHIPNAME rp2040'

按照提示,下面的方法一样(set USE_CORE 0要放中间):

openocd -f interface/cmsis-dap.cfg -c  'set USE_CORE 0'-f target/rp2040.cfg  -c 'adapter speed 4000' -c 'set CHIPNAME rp2040' 
GDB调试

上面那个会保持等待连接,然后另外开一个terminal, attach gdb to openocd

# linux下输入:
gdb-multiarch picoboard_blinky.elf
# 在Windows下输入:
arm-none-eabi-gdb.exe picoboard_blinky.elf

然后连接gdb上去:

(gdb) target remote localhost:3333 或者
target remote :3333 或者
target extended-remote :3333
同理,也可以远程调试,比如
target remote 192.168.31.16:3333

当然,远程连接的时候要先检测对应端口有没有被防火墙拦。
and load picoboard_blinky.elf into flash:

(gdb) load

然后运行:

(gdb) monitor reset init
(gdb) continue

如果需要下断点,就提前下好然后continue,也可以在编译之前时候就下好断点:

(gdb) monitor reset init
(gdb) b main
(gdb) continue

也可以中途使用 file filename.elf 来更换执行文件,更换后用load加载。

ctrl+c来暂停正在运行的程序。

windows下输入exit或者ctrl-d退出gdb调试。

注意自调试下不要调试带usb的程序,会出bug,因为daplink本身就用了USB,会导致daplink失效,不过这样依然能把程序通过SWD下进去。

基于VSCode的自调试

前面打开工程的方法还是一样:

Raspberry-Pi-PICO系列–第四篇 开发环境搭建-Windows系统 + Visual Studio Code开发_coder.mark的博客-CSDN博客_树莓派pico开发环境

前面的配置步骤还是一样,就是哪些使用picoprobe的程序配置,后面只需要更改launch.json文件里面的:

 configuration:"configFiles": ["/interface/picoprobe.cfg","/target/rp2040.cfg"],

替换为

                 "configFiles": ["interface/cmsis-dap.cfg","target/rp2040-core0.cfg"],"openOCDLaunchCommands": ["transport select swd","adapter speed 4000"],

或者替换为:

                 "configFiles": ["interface/cmsis-dap.cfg","target/rp2040.cfg"],"openOCDLaunchCommands": ["set USE_CORE 0""transport select swd","adapter speed 4000"],

然后,把configurations下面的花括号以及其内容复制一份,加个逗号后加在后面做一些修改,用来增加一份配置方便切换。目的是方便在单核自调试和外部仿真器调试多核中切换。

同样的方法可以添加一份linux的配置。用来方便跨平台。

参考:

pico-debug/openocd.md at master · majbthrd/pico-debug (github.com)

majbthrd/pico-debug:RP2040“Raspberry Pi Pico”的虚拟调试盒,无需添加硬件 (github.com)

2.2 使用外部debug工具

2.2.1 买一个rp2040做一个picoprobe.

这绝对是体验最好的方法。既然用了picoprobe也可以就去配置vscode,也能调试,但

然后用platformIO的wio框架开发裸环境,这是最快的方法。是比较麻烦。

专用的openocd直接从platformio的platformio/tool-openocd-raspberrypi下面扣一个。或者下载别人编译好的。(btw,现在好像不需要专用的openocd了)

2.2.2 其他的daplink或者jlink

首先需要保证手上的cmsis-dap能用,这是大前提,有的dap在openocd里面效果有问题。尽管十块钱的wch-link就能调试了,但是很玄学,在win10上不行,在win11上又行。

使用IDE来调试

见前面的IDE配置文档。

使用pico-generator生成工程

Clion体验组好,支持openocd

然后是vscode,配置很麻烦,cmakelist也要自己写,基本不考虑。

kdevelop是个five,不如vscode。

经过尝试,同样的openocd语句,板载的dap可以连上,我自己的就不行。

调试方法

probe的驱动需要安装为libusb-win32

关于openocd,除了picoprobe似乎没必要下载专用的openocd了,新的已经支持了,不过还没试过。

实测:

jlink需要v10以上,v9可认但是提示不支持。如果用openocd来的话需要替换驱动为winusb(zadig),当然我手上这个jlink lite v9还是不支持连接。Zadig - USB driver installation made easy (akeo.ie)

使用Jlink-SWD下载与调试Raspberry Pi Pico | CBC Notes (imcbc.github.io)

普通daplink目前是连不上的,和openocd本身的问题可能有关吧。

如果启用了使用USB打印,确实运行的时候会初始化一个串口设备,第一次也会弹出安装“Pico”成功,这个串口设备也能连接,但是似乎串口助手没有收到东西。但同时有个启动失败的叫做Reset的设备,不知道是不是和驱动有关,

svd file就是CMSIS SVD(System View Description) ,相当于给编译器看的数据手册。

很奇怪,被指定50000 50001 50002端口的时候,wchlink就会连接不上,就像v1版本的daplink那样的报错。可能是因为指定端口的时候它阻塞了多核的按顺序分配端口。只有单核的时候没这个问题。这个插件实属有点离谱。
另外不是所有的v2都支持,有的也会提示mutidrop core连不上,比如我随便找的一个cmsis-dap v2的固件刷到了我的stm32板子上,能识别就是不认多核。

[rp2040.cpu] Could not find MEM-AP to control the core

cortex-debug/debug_attributes.md at master · Marus/cortex-debug (github.com)

正常的时候多核和单核的连接:


PS C:\Users\AlwaysTS> openocd -f interface/cmsis-dap.cfg  -f target/rp2040.cfg  -c 'adapter speed 4000' -c 'set CHIPNAME rp2040'
Open On-Chip Debugger 0.12.0-rc2+dev-00988-g04887d3b6 (2022-12-03-09:30)
Licensed under GNU GPL v2
For bug reports, readhttp://openocd.org/doc/doxygen/bugs.html
adapter speed: 4000 kHzrp2040
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 4000 kHz
Info : SWD DPIDR 0x0bc12477, DLPIDR 0x00000001
Info : SWD DPIDR 0x0bc12477, DLPIDR 0x10000001
Info : [rp2040.core0] Cortex-M0+ r0p1 processor detected
Info : [rp2040.core0] target has 4 breakpoints, 2 watchpoints
Info : [rp2040.core1] Cortex-M0+ r0p1 processor detected
Info : [rp2040.core1] target has 4 breakpoints, 2 watchpoints
Info : starting gdb server for rp2040.core0 on 3333
Info : Listening on port 3333 for gdb connections
Info : starting gdb server for rp2040.core1 on 3334
Info : Listening on port 3334 for gdb connections
shutdown command invoked
PS C:\Users\AlwaysTS> openocd -f interface/cmsis-dap.cfg -c  'set USE_CORE 0' -f target/rp2040.cfg  -c 'adapter speed 4000' -c 'set CHIPNAME rp2040'
Open On-Chip Debugger 0.12.0-rc2+dev-00988-g04887d3b6 (2022-12-03-09:30)
Licensed under GNU GPL v2
For bug reports, readhttp://openocd.org/doc/doxygen/bugs.html
0
adapter speed: 4000 kHzrp2040
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 4000 kHz
Info : SWD DPIDR 0x0bc12477, DLPIDR 0x00000001
Info : [rp2040.core0] Cortex-M0+ r0p1 processor detected
Info : [rp2040.core0] target has 4 breakpoints, 2 watchpoints
Info : starting gdb server for rp2040.core0 on 3333
Info : Listening on port 3333 for gdb connections

Cortex-Debug for Visual Studio Code | Alone on a Mountaintop (lonesometraveler.github.io)

相关内容

热门资讯

java线程中断 interr... 1.  线程的状态: new -> 创建完线程,但是还没有启动runna...
16 | 如何做好面试后的复盘... 前言 前言:将经验转换为能力,就需要从经历的事情上总结复盘。 文章目...
Python基础学习七 类 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Py...
day 19 暴力枚举 注意:用long long 存答案P2241 统计方形(数据加强版&#x...
嵌入式理论复习题库(期末考试版... 一、填空题15*1=15 1. 要下载并调试 STM32 程序,可采用   ...
OSG三维渲染引擎编程学习之二... 目录 第三章:OSG场景组织 3.6 Transform变换节点 第三章:OSG场景组织 ...
cmake 04 使用 pyt... 本文目标 使用 python 写一个管理 cmake 工程的 cli 程序 参考 Python CL...
Java多线程(二)—— Re... ReentrantLock源码解析 ReentrantLock 是可重入的互斥锁,虽然...
linux shell脚本学习 linux shell脚本学习笔记 文章目录linux shell脚本学习笔记一、脚本入门1.我的第...
【MySQL】第九部分 MyS... 【MySQL】第九部分 MySQL信息函数 文章目录【MySQL】第九部分 MySQL信息函数9....