首页 > 其他分享 >普冉PY32系列(五) 使用JLink RTT代替串口输出日志

普冉PY32系列(五) 使用JLink RTT代替串口输出日志

时间:2023-02-11 20:35:26浏览次数:79  
标签:普冉 输出 SEGGER 串口 PY32 RTT JLink

目录

JLink RTT

JLink RTT(Real Time Transfer) 是用于嵌入式系统监控和交互的工具, 类似于SWO, 可以双向通信, 特点是性能很高, 基本上不影响嵌入式应用的实时行为, 可以对比一下使用printf输出日志时的各种限制. 而且因为和 JLink 接口集成, 不需要再浪费一个串口输出 printf了.

完整的介绍可以参考SEGGER官网的介绍页 https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

JLink RTT相关的软硬件

硬件部分

RTT可以支持最低端的 JLink OB, 因此硬件上只需要有一个 JLink OB.

软件部分

软件部分在 JLink 的安装包中都包含了, 主要是两部分

  • 用于上位机的 RTT Viewer, 在安装路径下可以找到, 打开是类似于串口客户端的界面
  • 用于MCU的RTT库文件, 在安装路径的 Samples/RTT/ 目录下可以找到一个 SEGGER_RTT_Vxxx.tgz文件, 这个文件里包含了RTT需要的库.

解开后目录结构为

├── Config
│   └── SEGGER_RTT_Conf.h
├── Examples
│   ├── Main_RTT_InputEchoApp.c
│   ├── Main_RTT_MenuApp.c
│   ├── Main_RTT_PrintfTest.c
│   └── Main_RTT_SpeedTestApp.c
├── LICENSE.md
├── README.md
├── RTT
│   ├── SEGGER_RTT_ASM_ARMv7M.S
│   ├── SEGGER_RTT.c
│   ├── SEGGER_RTT.h
│   └── SEGGER_RTT_printf.c
└── Syscalls
    ├── SEGGER_RTT_Syscalls_GCC.c
    ├── SEGGER_RTT_Syscalls_IAR.c
    ├── SEGGER_RTT_Syscalls_KEIL.c
    └── SEGGER_RTT_Syscalls_SES.c

在PY32F002A/003/030上使用JLink RTT

需要添加到项目的文件有

SEGGER_RTT.c
SEGGER_RTT.h
SEGGER_RTT_printf.c
SEGGER_RTT_Conf.h

其中 SEGGER_RTT_Conf.h 是RTT的配置文件

配置 SEGGER_RTT_Conf.h

其它的配置可以使用默认, 只需要调整一下 BUFFER_SIZE_UP, 这是在MCU上需要占用的字节数, 默认为 1024, 对于普通调试可以设成256.

#ifndef   BUFFER_SIZE_UP
  #define BUFFER_SIZE_UP                            (256)  // Size of the buffer for terminal output of target, up to host (Default: 1k)
#endif

再说一下 SEGGER_RTT_LOCK()和 SEGGER_RTT_UNLOCK(), 这两个方法用于禁用/启用MCU中断, 避免在RTT输出时被打断, 在M0/M0+上这两个方法默认为空, 因此是会产生输出混杂的情况的. 这块可以不设置, 因为RTT打印速度很快, 普通应用混杂的概率不大.

在项目中集成RTT输出

在需要使用RTT输出的程序文件上添加头文件

#include "SEGGER_RTT.h"

然后就可以调用RTT的方法输出了, 使用方法和printf基本上是一样的

# 输出字符串
SEGGER_RTT_WriteString(0, "exti_12 triggered\r\n");
# 输出带参数的字符串
SEGGER_RTT_printf(0, "SystemCoreClock: %ld\r\n", SystemCoreClock);

更完整的格式例子, 可以参考JLink ATT中的 Main_RTT_PrintfTest.c 文件

使用 RTT Viewer 查看输出

打开 RTT Viewer, 会弹出配置窗口, 以下根据 JLink OB进行配置

  • Connection to J-Link: 选择 USB
  • Specify Target Device: 选择 PY32F030X8, (如果是32KF/4KR的选择 PY32F030X6)
  • Target Interface & Speed: SWD, 4000KHz
  • RTT Control Block: Auto Detection

其它默认, 点击OK后就会连接到目标开始接收输出.

和使用串口有几点区别

  1. 使用 RTT 输出和 JLink 烧录是冲突的, 在烧录前需要断开 RTT
  2. RTT 带缓存, 因此即使错过一部分日志, 在连接上 RTT 后, 会将前面缓存的日志也显示出来
  3. RTT 的输出不带时间戳, 如果用惯了CuteCOM, 对这点可能会不习惯.

使用JLink RTT的示例代码

用于演示的代码已经放到仓库

https://github.com/IOsetting/py32f0-template/tree/main/Examples/LL/SEGGER_RTT

标签:普冉,输出,SEGGER,串口,PY32,RTT,JLink
From: https://www.cnblogs.com/milton/p/17112492.html

相关文章

  • Linux 串口驱动实例简单分析(x86 8250驱动(16550A),TIOCMGET, TIOCMSET, RTS)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • Ubuntu下安装串口调试助手CuteCom
    sudoapt-getinstallcutecom下载安装好后,通过whereis查看软件安装位置。imy@imy-virtual-machine:~$whereiscutecomcutecom:/usr/bin/cutecom/usr/share/man/m......
  • 普冉PY32系列(四) PY32F002/003/030的时钟设置
    目录普冉PY32系列(一)PY32F0系列32位CortexM0+MCU简介普冉PY32系列(二)UbuntuGCCToolchain和VSCode开发环境普冉PY32系列(三)PY32F002A资源实测-这个型号不简......
  • 华普物联WIFI串口服务器 HP-ERSWIFI-T200
    HP-ERSWIFI-T200串口服务器提供串口转WIFI、串口转以太网、以太网转WIFI功能,能够将串口(RS232/485)转换成TCP/IP网络接口,实现串口(RS232/485)与WIFI/以太网的数据双向透明传输......
  • 华普物联双串口服务器 HP-ERS-T200
    HP-ERS-T200是一款工业级串口服务器,实现了RJ45网口与RS485或RS232之间的数据透明传输;支持Modbus网关功能;支持多种保活机制;支持注册包+双向心跳包、虚拟串口、自动重连等功......
  • 华普物联双串口服务器 HP-ERS-T222
    HP-RES-T222双串口服务器用于实现串口到以太网口的数据的双向透明传输。用户无需关心具体细节,服务器内部完成协议转换。串口一侧实现串口数据的透明传输,以太网口一侧则是TC......
  • 华普物联四串口服务器HP-ERS-T244
    HP-RES-T244四串口服务器用于实现串口到以太网口的数据的双向透明传输。用户无需关心具体细节,服务器内部完成协议转换。串口一侧实现串口数据的透明传输,以太网口一侧则是TC......
  • USART—串口常见使用方法及注意事项
    串口常用的方式有查询、DMA、中断更多代码参考EVT中USART相关例程串口常用的状态位TXE、TC默认状态1      发送数据寄存器空、发送完成标志当串口正在......
  • 树莓派绑定串口
    如果树莓派绑定多个串口,就有可能出现问题:Linux是按照插入顺序对设备进行编号的,例如ttyUSB0,ttyUSB1或者ttyACM0,ttyACM1等等,那么每次重新开机的时候容易出现设备不对应编号的......
  • 【嵌入式】微芯旺KungFu32A156MQT与PC进行串口通信
    需要购买USB转串口芯片,安装串口驱动串口检测软件  USART0.h#ifndefUSART0_H_#defineUSART0_H_#include"system_init.h"#include<stdint.h>#defineSTD......