[STM32]jlink RTT使用详解

1.什么是Jlink RTT。
全称为SEGGER’s Real Time Transfer(RTT),一种基于SEGGER公司的基于JLink调试器的交互式用户I/O的技术。故名思义,就是一种基于jlink的和用户进行交互的技术,可以直观的显示调试芯片的信息,以及可以让用户和调试芯片进行互动的技术。

2.为什么要使用Jlink RTT。
1>不需要额外的引脚和硬件配置,支持SWD方式,两根线就可以使用。
2>速度快,与debug和run并行使用,平均一行文本可以在一微秒或更少的时间内输出。官方给出了一个速度对比图。

3>RTT的通信可以通过不同的应用程序完成,可以使用SDK集成到自定义的应用程序中,可本地连接,可远程连接。
基于以上3个优点,如果你还在调试ARM芯片的时候傻傻的使用USART进行用户交互,那实在是效率太低了。

3.Jlink使用RTT的准备
1>jlink软件包
SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace

2>Jlink仿真器一个,官网没找到到底哪一个版本的Jlink版本开始支持RTT的,看到网上说V9是支持的,我这里用的是Jlink V11的仿真器。
HW:V11.00
dll:V6.98c

4.移植RTT的SDK代码到MDK的工作
1>在上一步Jlink软件的安装路径下找到RTT的SDK包,我这里在D盘安装的。
D:\Program Files (x86)\SEGGER\JLink\Samples\RTT\RTT


2>MDK工程下新建一个RTT的文件夹,把下面四个文件复制到RTT目录下,将这些文件添加到MDK的工程中。


将代码添加到工程中



头文件包含



5.支持RTT的三个软件
Jlink提供了三个软件RTT Viewer、RTT Client、RTT Logger,这三个软件可以在SEGGER目录下找到:


6.使用RTT前的一些需要了解的几个概念。
使用RTT需要了解两个概念,即所谓的channel和terminal。这里我也只是根据我现在的认知做了一个解释,不一定恰当。
由于没有详解RTT的内部运行机制,我在这里把channel和terminals理解为软件的概念。
RTT的SDK默认支持2个channel,分别是0和1。
每个channel支持16个terminal,分别是0-F。
在这两个概念的基础上,我把RTT Viewer、RTT Client、RTT Logger这三个软件做了一个对照表。了解下面这个表格,才能更好的使用和配置RTT。



7.MDK的代码编写

1>头文件引用#include "SEGGER_RTT.h"
2>RTT的初始化函数 SEGGER_RTT_Init();
上面两项是通用代码,下面是使用通道0,用RTT Viewer、RTT Client输出一段调试信息。


/*********************************************************************************************************

*                                                主程序

*********************************************************************************************************/

int main (void)                                                                                 

{





  FLASH_ReadOutProtection(DISABLE);                                   //读保护





    SystemInit();                                                                            //CPU时钟初始化

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);        //使用优先级组4(4:4结构)



    SEGGER_RTT_Init();    



    #ifdef DEBUG_MODE                                                        //调试模式

    SEGGER_RTT_printf(0,"Demo Init!\r\n");

    #endif    





while(1)

{

        SEGGER_RTT_SetTerminal(0);     

        SEGGER_RTT_printf(0,"Demo Run Terminal 0!\r\n");    

        SEGGER_RTT_SetTerminal(1);     

        SEGGER_RTT_printf(0,"Demo Run Terminal 1!\r\n");         

}







  return (0);

}

 上面的代码就是用通道0的terminal0和terminal1输出调试信息。RTT的SDK中默认已经配置好channel 0的参数了,我们使用channel 0的时候,直接使用打印函数即可。
上述代码编辑后编译无错误,然后下载。

打开RTT Viewer后显示如下,按照实际情况配好参数后点击OK。



可以看到控制窗口已经输出了调试信息。>前面的数字即为当前使用的terminal ID。



打开RTT Client后显示如下:


这时候会发现没有数据输出。不要着急,重点来了。

1)先关闭RTT Client,点击MDK的Debug按钮进去Debug模式。



2)再次打开RTT Client,显示如下:



3)点击MDK的Run全速运行。控制台开始输出调试信息。



下面继续使用通道1,使用RTT Logger输出调试信息在log文件中。因为RTT Logger使用的是通道1,RTT的SDK中是没有给通道1分配缓存区和名称的,必须进行手动设置。
还有要注意的是,通道0和通道1是并行的,两者输出调试信息是不冲突的。
使用通道1的代码如下所示:

 

uint8_t _UpBufferCH1[64] = {0};
uint8_t _DownBufferCH1[64] = {0};


/*********************************************************************************************************
*                                                主程序
*********************************************************************************************************/
int main (void)                                                                                 
{


  FLASH_ReadOutProtection(DISABLE);                                   //读保护


    SystemInit();                                                                            //CPU时钟初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);        //使用优先级组4(4:4结构)

    SEGGER_RTT_Init();   


    /* 配置通道1,上行配置(STM32->RTT Viewer软件) */
    SEGGER_RTT_ConfigUpBuffer(1, "RTTUP", _UpBufferCH1, 64, SEGGER_RTT_MODE_NO_BLOCK_SKIP);

    /* 配置通道1,下行配置(RTT Viewer软件->STM32) */   
    SEGGER_RTT_ConfigDownBuffer(1, "RTTDOWN", _DownBufferCH1, 64, SEGGER_RTT_MODE_NO_BLOCK_SKIP);

    #ifdef DEBUG_MODE                                                        //调试模式
    SEGGER_RTT_printf(0,"Demo Init!\r\n");
    #endif   


while(1)
{
        SEGGER_RTT_SetTerminal(0);     
        SEGGER_RTT_printf(1,"Demo Run Terminal 0!\r\n");   
        SEGGER_RTT_SetTerminal(1);     
        SEGGER_RTT_printf(1,"Demo Run Terminal 1!\r\n");         
}



  return (0);
}

上述代码编辑后编译无错误,然后下载。
打开RTT Logger后如下所示:



这里要注意的是,在RTT Logger中,>后面可以自由输入>前面表示的参数,按回车键确认。无输入的情况下,按回车键跳过。
一直回车键,如果程序配置通道1正确的话,会出现下面图片的画面,不停的给log文件中写数据。
注意:如果程序中没有配置通道1,RTT Logger检测不到通道1的情况下就会自动关闭。
正确的RTT Logger显示画面如下:


打开上述路径中的.log文件,里面的内容如下所示,这说明成功的生成了log文件。



只要弄懂上面的内容,你就可以很爽的使用RTT来输出调试信息了,我们一般只使用RTT Viewer这个软件就足够了。他还可以设置显示的颜色,格式化输出等,具体的函数说明可以查看
Jlink安装目录下的使用手册16.4.1章节即可。
手册路径如下:D:\Program Files (x86)\SEGGER\JLink\Doc\Manuals。

---------------------
作者:xyz549040622
链接:https://bbs.21ic.com/icview-3118746-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一款由意法半导体(STMicroelectronics)推出的微控制器系列,而J-Link是由Segger公司开发的一款功能强大的调试和仿真器。STM32 J-Link电路指的是在STM32微控制器上使用J-Link调试和仿真器进行开发和调试的电路设计。 STM32 J-Link电路主要包括STM32微控制器、J-Link调试和仿真器、调试接口等组成部分。首先,STM32微控制器是整个电路的核心部分,它是一款具有高性能、低功耗和丰富外设的微控制器。其次,J-Link调试和仿真器是连接到STM32微控制器上的一种设备,它可以通过与计算机的USB接口进行通信,并提供丰富的调试和仿真功能,如单步调试、断点设置和内存读写等。最后,调试接口是连接STM32微控制器和J-Link调试器的接口,常见的接口有JTAG、SWD等。 在STM32 J-Link电路中,首先需要将J-Link调试和仿真器与计算机通过USB接口连接,然后再将J-LinkSTM32微控制器通过调试接口连接。在开发和调试过程中,开发人员可以通过J-Link调试器与STM32微控制器进行通信,实现对微控制器的控制和调试。 通过STM32 J-Link电路,开发人员可以方便地进行STM32微控制器的开发和调试。使用J-Link调试器可以快速、准确地定位和修复软件中的错误,并提高开发效率和代码质量。同时,J-Link调试器还支持多种开发环境和编程语言,如Keil、IAR等,满足不同开发人员的需求。 总之,STM32 J-Link电路是一种常见的用于STM32微控制器开发和调试的电路设计。它利用J-Link调试和仿真器,通过调试接口连接STM32微控制器和计算机,提供了丰富的开发和调试功能,为开发人员提供了便利和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值