写这个不是为别的,网上的配置方法大多数是照着官方给的方法一抄,然后也不说这就是手册里面的,我最开始看的手册还没更新树莓派以外平台的写法,所以蒙圈了好久,现在总结了方法和选择记录下来,当然还有一些东西没来得及琢磨,之前都是喜欢开箱即用的懒人,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引脚,也可以;还有软件进入的方法。
这个虽然简单,但是用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,不支持多核。好处就是简单,导入包比较容易。
安装方式:
板子里面搜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)
Wiz-IO/wizio-pico: Raspberry Pi Pico development platform for PlatformIO (github.com)
安装方式
功能
支持原生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
下面这几个都很方便,因为他们都提供了集成的SDK下载和模板工程的创建,不需要官方那一套配置。
先安装visualGDB,这是一个给VS提供的跨平台包,关键词:VisualGDB的基本使用。
然后按照下面的方法,新建工程选模板,下sdk就好。
Developing Raspberry Pi Pico Projects with Visual Studio – VisualGDB Tutorials
但是VisualGDB是收费的,告辞,看起来很简单,我没试过。
下载链接: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的内容罢了。相对来说编译比官方杂七杂八的快多了。
而且跨平台,工程配置很方便。
点Tools-Package manager,搜pico,点一下,然后点next就安装好sdk了。
点Project-Add project,选树莓派的第一个pico是官方的板子的,程序里面会给个bsp,不带pico就是裸片,区别不大。
然后是工程配置:
目标处理器选0或者1,对应核心,
编译器可以选gcc或者segger,
剩下一些配置默认就行。
然后编译,debug。
默认没有生成uf2文件,没找到在哪里生成,也许不支持UF2这种方法。
不支持V10以下的Jlink。。。也有的说能支持,但是反正我的Jlink Lite V9显示不支持multi-drop,也有人说需要Jlink v11才行。
[SOLVED] RP2040 Support - J-Link/Flasher related - SEGGER - Forum
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,不然连接不上。
国产软件,评价很高,社区版免费。下载链接: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
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
网上找的方法绝大多数都是基于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的使用
目前我的环境是Windows11,参考官方文档getting-started-with-pico.pdf:9.2. Building on MS Windows
cmake:
官方生成器是基于cmake构建的,勾选添加环境变量for all users。实际上就是系统环境变量。
gcc-arm-none-eabi:
Arm GNU Toolchain ,这里没啥特殊要求,可以下最新的。安装完了之后手动勾选添加到路径,还要检查一下能不能直接在cmd里面使用arm-none-eabi-gcc命令,否则说明他添加的路径有问题,手工改一下(现在的版本应该直接可用)
python:
后面用他的生成器要用。勾选环境变量,解除长路径限制。
git:
不用说。
Windows下的编译器:
调用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这里打开,具有内置的环境。
实际上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标题下面的包,在线安装包压根连不上。
(mingw32下载链接:https://osdn.net/projects/mingw/# 上面是旧版mingw32,2017年就停更了,可能也能用。)
p.s.
旧版的mingw64可能编译报错,编译的时候可能会出现类似于'C:/Program' 不是内部或外部命令,也不是可运行的程序
这样的问题。
这里最终用刚刚下载的mingw -w64。
最前面下好了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的路径
其实这个步骤不是必须的,但是最好测试一次,同时也演示了不配置IDE怎么编译。
也就是官方手册指出的方法,那么
打开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这个驱动器,发送完会自动运行。
直接在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步骤。
以上就是标准的例程配置方法。
(这里提前说一下,如果生成有问题,首先更新到最新的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挺好的。
1、配置好环境,下好官方sdk和例程还有生成器,配置好环境变量。
2、使用生成器生成工程
3、使用nmake或者make(mingw32-make)编译
4、编译得到的uf2可以直接从usb启动,得到的elf可以使用swd烧录或调试(调试需要之前就编译参数指定为debug),bin文件可以烧录到flash
5、注意工程路径不要有中文。
当然了,直接打开文件夹里面文件编辑编译,配置文件也不方便,编译烧录调试更不方便,添加文件还要自己写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共用一个都行)
其中最有名的可能是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快不少。
通过插件支持,需要安装CMakeTool cortex-debug
前面使用生成器的时候,勾选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 2E8A
并使用驱动程序。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的输出。
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到了。
这个编辑器倒是算是正常。
不过仍然是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的问题。
这个IDE也是可以基于Cmake的,下面这是个stm32的配置
https://blog.csdn.net/u012750409/article/details/52516653
但是也可以直接用cmake -G "CodeLite - MinGW Makefiles"来转
实测能用,效果还不错,但是配置调试比较麻烦。利用外部工具执行烧录还是可以的。
同理:
CodeBlocks - MinGW Makefiles
Eclipse CDT4 - MinGW Makefiles
参考官方教程,很详细。如果不想单独下个eclipse的话,看看电脑上哪个基于eclipse的IDE不是阉割的可以直接拿来用。
由于各种原因,Linux下配置简单一点。
如果是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/
./configure
make
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 的移动硬盘 即可完成下载。
和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。
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”
(起码目前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
单核开发,不需要调试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'
上面那个会保持等待连接,然后另外开一个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下进去。
前面打开工程的方法还是一样:
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)
这绝对是体验最好的方法。既然用了picoprobe也可以就去配置vscode,也能调试,但
然后用platformIO的wio框架开发裸环境,这是最快的方法。是比较麻烦。
专用的openocd直接从platformio的platformio/tool-openocd-raspberrypi下面扣一个。或者下载别人编译好的。(btw,现在好像不需要专用的openocd了)
首先需要保证手上的cmsis-dap能用,这是大前提,有的dap在openocd里面效果有问题。尽管十块钱的wch-link就能调试了,但是很玄学,在win10上不行,在win11上又行。
见前面的IDE配置文档。
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)