树莓派Raspberry Pico RP2040 开发环境配置完全缝合终极版C-SDK

树莓派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 4000

set CHIPNAME rp2040

source [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, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 4000 kHz

rp2040
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, read
        http://openocd.org/doc/doxygen/bugs.html
0
adapter speed: 4000 kHz

rp2040
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)

你可能感兴趣的:(单片机学习,c语言,python,开发语言,单片机,嵌入式硬件)