From 87060266798a9758431d1d72d569f59769e855fb Mon Sep 17 00:00:00 2001 From: "rick.chan" Date: Mon, 29 Apr 2024 19:41:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20RTT=20=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E8=AF=B4=E6=98=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rick.chan --- .../Applications/PyOCD/PyOCD_的基本使用.md | 49 +++++++++++++++--- Software/Applications/PyOCD/RTT.zip | Bin 0 -> 20956 bytes 2 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 Software/Applications/PyOCD/RTT.zip diff --git a/Software/Applications/PyOCD/PyOCD_的基本使用.md b/Software/Applications/PyOCD/PyOCD_的基本使用.md index 2aeb44b..013d057 100644 --- a/Software/Applications/PyOCD/PyOCD_的基本使用.md +++ b/Software/Applications/PyOCD/PyOCD_的基本使用.md @@ -2,10 +2,11 @@ ## 1. 基本命令 -- erase -- load -- gdbserver -- list:列出已连接的调试器。 +- erase:擦除 Flash; +- load:烧写 Flash,带擦除和校验; +- gdbserver:启动 GDB Server 服务器; +- list:列出已连接的调试器; +- rtt:控制 SEGGER RTT 兼容接口。 ## 2. pack 管理 @@ -38,7 +39,7 @@ pyocd erase --chip --target --pack <"/Path/To/Nationstech.N32 ## 5. 烧写芯片 -使用 load 命令烧写新,需要指定烧写的起始地址和要烧写的程序。 +使用 load 命令烧写新,需要指定烧写的起始地址和要烧写的程序。load 命令会自动擦除 Flash 并校验,可以指定擦除和校验方法。 ```bash pyocd.exe load --trust-crc --base-address <"/Path/To/Program.hex"> --target --frequency {Examples: "1000", "2.5khz", "10m"} --erase {auto,chip,sector} --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> @@ -52,6 +53,42 @@ pyocd.exe load --trust-crc --base-address <"/Path/To/Pro pyocd gdbserver --port 50000 --telnet-port 50001 --target --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> ``` -## 7. 外部参考资料 +## 7. RTT 控制 + +项目中如果兼容 RTT 接口,则可以通过 PyOCD 查看 RTT 输出。集成 RTT 的方法为,将 [RTT 接口](./RTT.zip) 文件解压后添加到项目中,代码中增加: + +```c +#include "SEGGER_RTT.h" + +SEGGER_RTT_ConfigUpBuffer(0, "RTTUP0", NULL, 0, + SEGGER_RTT_MODE_NO_BLOCK_SKIP); +SEGGER_RTT_ConfigDownBuffer(0, "RTTDOWN", NULL, 0, + SEGGER_RTT_MODE_NO_BLOCK_SKIP); +SEGGER_RTT_SetTerminal(0); +``` + +进行配置,使用: + +```c +SEGGER_RTT_printf(0, "Hello\r\n"); +``` + +进行打印。 + +该方法不但支持 Jtag,还支持 CMSIS-DAP/DAPLink 等调试器。 + +```bash +pyocd.exe rtt --target --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> +``` + +其他参数: + +- --help +- --address +- --up-channel-id +- --down-channel-id +- --log-file + +## 8. 外部参考资料 1. [PyOCD Command reference](https://pyocd.io/docs/command_reference.html) diff --git a/Software/Applications/PyOCD/RTT.zip b/Software/Applications/PyOCD/RTT.zip new file mode 100644 index 0000000000000000000000000000000000000000..051d345f9246e90daccc498c6039547b80f5d8c2 GIT binary patch literal 20956 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 literal 0 HcmV?d00001