请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 14262|回复: 37
收起左侧

[专题教程] 【专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码(2020-05-02)

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
发表于 2018-3-9 00:45:57 | 显示全部楼层 |阅读模式
说明:
1、在实际项目中,很多时候,我们需要将传感器或者ADC的数值以波形的形式显示。通常的解决办法是用串口上位机,USB接口上位机或者MDK的逻辑分析仪功能,使用这三种方式都比较繁琐。本期专题为大家讲解的J-Scope波形软件简单易用,不占用系统额外资源,无需用户写目标板代码,仅需将JLINK插上即可。
2、J-Scope波形显示软件主要有RTT和HSS两种工作方式。本期专题教程为大家讲解HSS模式的使用方法。HSS模式只需使用J-Scope加载MDK或者IAR的可执行文件即可,而且随时随地都可以连接目标板,不影响目标板的正常功能,不需要额外资源。同时可以设置上升沿,下降沿或者双沿触发。
3、大家买的D版JLINK,基本都是来自JLINK BASE,需要使用V9或者V10版本才行。而JLINK PRO或者JLINK ULTRA使用V4及其以上版本即可。
4、J-Scope专题教程的RTT模式将放在第6期专题教程做,这个模式更加实用,就是稍麻烦些,需要移植SEGGER的RTT组件,即使是普通的JLINK,速度也可以狂飙到500KB/S左右的上传速度
5、更多相关内容和注意事项,看教程即可。


专题教程下载:
专题教程第4期:J-Scope波形软件使用方法(上)V1.2.pdf (1.78 MB)

J-Scope下载:
Setup_JScope_V611m.exe (2.08MB)

配套例子(含MDK和IAR):
STM32F103ZET6开发板:V4-J-Scope波形软件之HSS模式.7z (936.53KB)
STM32F407IGT6开发板:V5-J-Scope波形软件之HSS模式.7z (2.10MB)
STM32F429BIT6开发板:V6-J-Scope波形软件之HSS模式.7z (3.04MB)

教程目录:
QQ截图20180309004958.png

HSS效果截图:
1.png
2.png

简单的动态图,未设置触发,普通JLINK可采集10路波形。
4.gif


回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-9 23:07:25 | 显示全部楼层
这个好。mark。刚好准备用
回复

使用道具 举报

11

主题

30

回帖

63

积分

初级会员

积分
63
发表于 2018-4-19 23:37:50 | 显示全部楼层
JLINK OB能玩这个吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2018-4-20 00:46:25 | 显示全部楼层
ZXB 发表于 2018-4-19 23:37
JLINK OB能玩这个吗?

现在国内的D版OB好像都是V7的,不知道行不行。得实际测试下。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2018-5-28 14:29:18 | 显示全部楼层
未设置触发,200KHz采样,速度400KB/S
3.gif

设置了触发,200KHz采样,速度400KB/S
4.gif
回复

使用道具 举报

8

主题

94

回帖

118

积分

初级会员

积分
118
发表于 2018-6-17 09:52:12 | 显示全部楼层
硬汉哥,我在用J-Scope的过程中遇到两个问题
1.新建的时候无法选择芯片,不知道是否跟jlink有关系。我的是jlink edu mini版的。
2.运行就J-Scope死机了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2018-6-17 12:35:12 | 显示全部楼层
Oenomaus 发表于 2018-6-17 09:52
硬汉哥,我在用J-Scope的过程中遇到两个问题
1.新建的时候无法选择芯片,不知道是否跟jlink有关系。我的是 ...

安装当前最新的6.3x驱动。
回复

使用道具 举报

0

主题

1

回帖

10

积分

新手上路

积分
10
发表于 2018-10-7 18:12:18 | 显示全部楼层
STM32F429IGT6 不知道能不能用?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2018-10-8 01:35:13 | 显示全部楼层
ZLW 发表于 2018-10-7 18:12
STM32F429IGT6 不知道能不能用?

没问题,M内核芯片都支持。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2019-1-17 14:43:02 | 显示全部楼层
硬汉哥威武
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2019-6-20 14:22:46 | 显示全部楼层
太厉害了
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2019-12-14 12:57:42 | 显示全部楼层
查看数值全部是0会是什么原因?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2019-12-14 13:10:20 | 显示全部楼层
jcx0324 发表于 2019-12-14 12:57
查看数值全部是0会是什么原因?

用JLINK V9或者以上试试。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2020-5-2 18:54:53 | 显示全部楼层
升级下文档链接

2020-05-02
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-8-7 16:51:09 | 显示全部楼层
硬汉哥,请教,为什么我找不到STM32H750呢,如果找不到可以用相近的型号代替吗?不过我试了选743的型号,但是变量选择以后没有显示打勾的地方,就是选中不了变量?选不了为什么还可以点红点点开始,不过什么也没画出来
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2020-8-7 18:07:06 | 显示全部楼层
Hss 发表于 2020-8-7 16:51
硬汉哥,请教,为什么我找不到STM32H750呢,如果找不到可以用相近的型号代替吗?不过我试了选743的型号,但 ...

用RTT模式比较舒服些。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2022-4-27 13:25:32 来自手机 | 显示全部楼层
这个功能很使用
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2022-12-29 18:14:52 | 显示全部楼层
为什么我的型号选不上 ,但是我keil mdk里面可以选型号下载;
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2022-12-30 09:15:31 | 显示全部楼层
曾志远123 发表于 2022-12-29 18:14
为什么我的型号选不上 ,但是我keil mdk里面可以选型号下载;

不能选择就手动输入
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-5-26 10:56:29 | 显示全部楼层
下载pdf,edge居然显示不安全
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2023-5-27 09:34:36 | 显示全部楼层
eruca250 发表于 2023-5-26 10:56
下载pdf,edge居然显示不安全

各种无药可救的杀毒软件,危险网站识别乱象
https://www.armbbs.cn/forum.php?mod=viewthread&tid=119312
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-9-15 11:20:43 | 显示全部楼层
测试了下,数组和普通全局变量可以,结构体成员好像我测试数据都是错的。
这里推荐NXP的一个工具FreeMaster,应该比Scope功能更丰富和强大,目前还没看出来有速率限制,变量随便加。关键的是很多仿真器Jlink,DAP,PE等好像都能用。
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-9-15 11:24:22 | 显示全部楼层
另外,评论怎么发送图片呀
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2023-9-15 11:25:29 | 显示全部楼层
高级模式里好像可以

下载 (3).png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2023-9-16 16:47:08 | 显示全部楼层
fujianjie 发表于 2023-9-15 11:25
高级模式里好像可以

这个实际上是属于HSS模式,要下载器不断的轮询。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-7-11 14:57:11 | 显示全部楼层
你好  你这个 传输频率能达到多少?比如我做电机控制,10kHz的频率,想把电流发出来看看。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2024-7-12 09:30:37 | 显示全部楼层
allnights 发表于 2024-7-11 14:57
你好  你这个 传输频率能达到多少?比如我做电机控制,10kHz的频率,想把电流发出来看看。

10K没问题。
回复

使用道具 举报

81

主题

490

回帖

733

积分

金牌会员

积分
733
发表于 2024-10-12 07:18:37 | 显示全部楼层

一个周期得传三电流信号6字节,再加其它信号算4字节,就要10字节,10字节就是80位,就相当于800kbps了,jscope有压力吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2024-10-12 09:48:40 | 显示全部楼层
tangqianfeng 发表于 2024-10-12 07:18
一个周期得传三电流信号6字节,再加其它信号算4字节,就要10字节,10字节就是80位,就相当于800kbps了,j ...

这个是我们TOOL的Scope功能测试

H7-TOOL的RTT波形最高速度稳定性测试(2023-02-23)
https://www.armbbs.cn/forum.php? ... 8082&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

81

主题

490

回帖

733

积分

金牌会员

积分
733
发表于 2024-10-12 10:01:55 | 显示全部楼层
本帖最后由 tangqianfeng 于 2024-10-12 10:10 编辑
eric2013 发表于 2024-10-12 09:48
这个是我们TOOL的Scope功能测试

H7-TOOL的RTT波形最高速度稳定性测试(2023-02-23)

牛,性能很好,SWD要选多少M的速率?
sprintf(buf, "%f\r\n", testInput_f32_REF[j]);
SEGGER_RTT_WriteString(0, buf);

使用sprintf,未格式化输出字符串长度,buf中的数值不应该是随着testInput_f32_REF的值而变化的么?
还有RTT有没有直接使用二进制方式来读取缓存啊,要格式化成字符串,效率不高啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2024-10-13 01:16:51 | 显示全部楼层
tangqianfeng 发表于 2024-10-12 10:01
牛,性能很好,SWD要选多少M的速率?
sprintf(buf, "%f\r\n", testInput_f32_REF[j]);
SEGGER_RTT_Writ ...

SWD接口满速。

1、这个是正弦波的,范围-1到1, 数据字节数基本就是X.XXXXXX这种的。
2、这个影响不大,因为这个是CPU运行存到RAM块里面的,SWD接口仅负责读取RAM块,CPU的速度远快于SWD读取。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-11-23 16:28:20 | 显示全部楼层
博主,你好,我用国产ARM仿真器芯片选型那一步总是会闪退,按你说的手动输入芯片型号(一款国产芯片ET6001),进入仿真测试界面,点击运行的时候会被提示报出无法识别到设备,是为什么呀?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2024-11-24 11:03:28 | 显示全部楼层
fanxiaochong 发表于 2024-11-23 16:28
博主,你好,我用国产ARM仿真器芯片选型那一步总是会闪退,按你说的手动输入芯片型号(一款国产芯片ET6001 ...

闪退是老毛病了,不太好解决。可以换个版本试试。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-2-11 18:23:07 | 显示全部楼层
硬汉哥,问一下HES模式下是不是只能输出一个波形? ,我想在HSE模式下输出多个数据波形没成功
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2025-2-12 07:53:18 | 显示全部楼层
尼夫拉斯 发表于 2025-2-11 18:23
硬汉哥,问一下HES模式下是不是只能输出一个波形? ,我想在HSE模式下输出多个数据波形没成功

HSS模式吗,支持多个波形展示的
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-2-12 10:54:50 | 显示全部楼层
uint8_t buf[2048] = {0};
uint8_t buf_1[2048] = {0};

/*  正弦波数据,12bit,1个周期128个点, 0-4095之间变化 */
const uint16_t g_SineWave128[] = {
2047, 2147, 2248, 2347, 2446, 2544, 2641, 2737, 2830, 2922, 3012, 3099, 3184, 3266, 3346, 3422,
3494, 3564, 3629, 3691, 3749, 3803, 3852, 3897, 3938, 3974, 4006, 4033, 4055, 4072, 4084, 4092,
4094, 4092, 4084, 4072, 4055, 4033, 4006, 3974, 3938, 3897, 3852, 3803, 3749, 3691, 3629, 3564,
3494, 3422, 3346, 3266, 3184, 3099, 3012, 2922, 2830, 2737, 2641, 2544, 2446, 2347, 2248, 2147,
2047, 1947, 1846, 1747, 1648, 1550, 1453, 1357, 1264, 1172, 1082,  995,  910,  828, 748,   672,
600,  530,  465,  403,  345,  291,  242,  197,  156,  120,   88,   61,   39,   22,  10,     2,
   0,    2,   10,   22,   39,   61,   88,  120,  156,  197,  242,  291,  345,  403, 465,   530,
600,  672,  748,  828,  910,  995, 1082, 1172, 1264, 1357, 1453, 1550, 1648, 1747, 1846, 1947,
};

const uint16_t g_SquareWave[] = {
    4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095,    0,    0,    0,    0,    0,    0,    0,    0,
    4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095,    0,    0,    0,    0,    0,    0,    0,    0,
};
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MPU Configuration--------------------------------------------------------*/
  MPU_Config();

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
       
//        SEGGER_RTT_ConfigUpBuffer(0, "RTTUP", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);                        /* ����ͨ��0����������*/
//        SEGGER_RTT_ConfigDownBuffer(0, "RTTDOWN", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);        /* ����ͨ��0����������*/       
//        SEGGER_RTT_SetTerminal(0);
//        SEGGER_RTT_printf(0, "SEGGER_RTT_GetKey \r\n");       

        SEGGER_RTT_ConfigUpBuffer(1, "JScope_u2", buf, 2048 , SEGGER_RTT_MODE_NO_BLOCK_SKIP);
        SEGGER_RTT_ConfigUpBuffer(2, "JScope_u4", buf_1, 2048 , SEGGER_RTT_MODE_NO_BLOCK_SKIP);       
       
        SetLedInit();
        //bsp_InitDWT();      /* 初始化DWT时钟周期计数器 */
        bsp_InitTimer();          /* 初始化滴答定时器 */
       
//        CAN1_Init(RxData,FDCAN_MODE_NORMAL,8,31,8,10);   //初始化CAN控制器,环回模式,500KHz频率       
        bsp_InitCan1();
        bsp_InitCan2();
        //ConfigureCANClockToHSE();
       
        unsigned int nCanClockFrequency = 0;
        unsigned int nSystemClock = 0;
        unsigned int nArbitrationBaudRate = 0;
        unsigned int DataBaudRate = 0;
       
        nCanClockFrequency = GetFDCANClockFrequency();
        nArbitrationBaudRate = GetCANArbitrationBitrate(nCanClockFrequency);
        DataBaudRate = GetCANDataBitrate(nCanClockFrequency);
        nSystemClock = GetSystemClockFrequency();

        RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
        HAL_RCCEx_GetPeriphCLKConfig(&PeriphClkInitStruct);
       
//        SEGGER_RTT_SetTerminal(0);
//        SEGGER_RTT_printf(0 , "PLL2M: %d\n", PeriphClkInitStruct.PLL2.PLL2M);
//        SEGGER_RTT_printf(0 , "PLL2N: %d\n", PeriphClkInitStruct.PLL2.PLL2N);
//        SEGGER_RTT_printf(0 , "PLL2Q: %d\n", PeriphClkInitStruct.PLL2.PLL2Q);
//        SEGGER_RTT_printf(0 , "nCanClockFrequency = %d \r\n", nCanClockFrequency);       
//        SEGGER_RTT_printf(0 , "nArbitrationBaudRate = %d \r\n", nArbitrationBaudRate);       
//        SEGGER_RTT_printf(0 , "DataBaudRate = %d \r\n", DataBaudRate);               
//        SEGGER_RTT_printf(0 , "nSystemClock = %d \r\n", nSystemClock);

        unsigned char arrtest[8] = {1,2,3,4};
  /* USER CODE END 2 */
        bsp_StartAutoTimer(0, 2500);        /* 启动1个500ms的自动重装的定时器 */
       
        //SetPDORelativePositionSports(2 , -50000 , 1000);
       
        if(SetAnyPointToZero(MOTOT_ID2) != 0)
        {
//                SEGGER_RTT_SetTerminal(0);
//                SEGGER_RTT_printf(0 , "Set any zero is ok\n");                               
        }
        bsp_StartAutoTimer(1, 500);
        bsp_StartAutoTimer(2, 100);
       
        bsp_StartAutoTimer(3, 150);
        static unsigned char nloop = 0;
        uint32_t StandardFrameId;
        unsigned short nTrapeSpeed = 25;
        SetPDOSpeedModeSports(2 , 25);
        static int i =0;
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
                //can1_SendPacket(0X05 , arrtest , 4);
                if(bsp_CheckTimer(3))
                {
                        SEGGER_RTT_Write(1 , &g_SineWave128[(i++)%128] , 2);
                }               
       
                if(bsp_CheckTimer(2))
                {
                        SEGGER_RTT_Write(2 , &g_SquareWave[(i++) % sizeof(g_SquareWave) / sizeof(g_SquareWave[0])], 2);
                }
        }
} 硬汉哥,我用的HSS模式,想要输出2个波形一个正弦一个方波,但这样子实际出来只有一个正选波形,除非我把SEGGER_RTT_ConfigUpBuffer(1, "JScope_u2", buf, 2048 , SEGGER_RTT_MODE_NO_BLOCK_SKIP); 屏蔽掉 ,就显示方波,但也是只有一个方波[img][/img]
方波.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115481
QQ
 楼主| 发表于 2025-2-13 10:41:03 | 显示全部楼层
尼夫拉斯 发表于 2025-2-12 10:54
uint8_t buf[2048] = {0};
uint8_t buf_1[2048] = {0};

不清楚这个怎么回事了。
回复

使用道具 举报

2

主题

15

回帖

21

积分

新手上路

积分
21
发表于 2025-2-20 11:23:09 | 显示全部楼层
eric2013 发表于 2025-2-13 10:41
不清楚这个怎么回事了。

不能添加新的symbol,只能显示一个采样通道
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-28 09:49 , Processed in 0.631113 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表