码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 普冉PY32系列(五) 使用JLink RTT代替串口输出日志


    目录

    • 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
    • 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
    • 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单
    • 普冉PY32系列(四) PY32F002A/003/030的时钟设置
    • 普冉PY32系列(五) 使用JLink RTT代替串口输出日志
    • 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD

    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

  • 相关阅读:
    AI企业盈利与成本问题
    【CSharp】无符号短整型数组ushort[]转化为IntPtr
    稀疏数组的介绍和使用
    GBase 8a更新全文索引
    JAVA计算机毕业设计小型企业员工工资管理系统(附源码、数据库)
    java计算机毕业设计web企业档案管理系统MyBatis+系统+LW文档+源码+调试部署
    QT5自适应
    Go语言入门【6】切片
    JavaSE_day01【Java概述、环境搭建、标识符、变量、基本数据类型】
    1139 First Contact
  • 原文地址:https://www.cnblogs.com/milton/p/17112492.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号