在实际项目中,很多时候,我们需要将传感器、ADC的数值和计算的结果变量以波形的形式显示。通常的解决办法是用串口上位机、USB接口上位机或者MDK的逻辑分析仪等方式输出查看,使用这三种方式都比较繁琐,需要占用额外的系统资源。今天为大家讲解的J-Scope波形软件简单易用,不占用系统额外资源,无需用户写目标板代码,仅需将JLINK插上即可。
针对以上的问题,SEGGER推出了J-Scope波形显示软件。
1. J-Scope上位机
J-Scope是SEGGER公司推出的,可以在目标MCU运行时,实时分析数据并图形化显示的软件。它不需要SWO或目标上的任何额外引脚等功能,使用标准的调试端口即可。J-Scope波形显示软件主要有RTT和HSS两种工作方式。
1.1 HSS模式
HSS模式不需要在用户代码上面添加任何代码即可实现。只需要使用J-Scope加载MDK或者IAR的可执行文件即可(MDK生成的可执行文件为.axf文件,IAR生成的文件为.out文件),而且随时随地都可以连接目标板,不影响目标板的正常功能,不需要额外资源,同时可以设置上升沿,下降沿或者双沿触发。
1.2 RTT模式
RTT快速上传模式,需要用户在代码上加入RTT的相关组件(相关组件的添加请参考上一章节),并使用J-Link与目标板连接,此模式采用标准的下载接口,用到的下载接口有VCC、GND、SWDIO、SWCLK、RST。
1.3 J-Scope在HSS模式下支持的产品型号
1.4 JScope在RTT模式下支持的产品型号
1.5 不同版本的J-Link速度对比
2. HSS模式获取数据
HSS模式比较简单,仅需要将编译器生成的可执行文件加入到J-Scope上位机软件即可。
相对于RTT模式来说此模式随时随地都可以连接目标板,并且不影响目标板的正常功能,并且不需要额外的资源。但是相对于RTT模式也存在着速度慢的缺点,采样的速度基本上在1KHZ左右,仅适合采样变量变化速度低于1KHZ的情况。
2.1 HSS模式使用方法
将目标板与J-Link连接,下载程序后并重新上电。
打开J-Scope的上位机软件,如下图所示:
创建工程,选择“Create new project”选项,弹出工程配置对话框。
J-Link使用的为USB接口,所以在进行配置的时候选择USB接口即可,芯片的具体型号可以根据用户自己的需求来选择,通信接口可以选择JTAG接口或者SWD接口,调试的模式选择HSS模式,并在elf file对话框中加载可执行文件。
勾选需要显示的变量名。
然后直接按F5开始运行,针对不同用户的使用情况,J-Scope可能会弹出不同的提示对话框,直接点击OK确认即可。
J-Scope上位机软件打印出波形。
3. RTT模式获取数据
RTT模式获取数据的原理就是利用SWD接口完成数据从MCU到J-Scope上位机软件的数据传输。此模式相对于HSS模式有更高的数据传输速率,最高可以达到2MB/s,并且随时可以连接目标板且不影响目标板的正常功能,并且可以添加时间戳。
3.1 RTT模式使用方法
3.1.1 软件配置
在目标工程中加入RTT的代码文件,具体的操作请参考上一讲RTT的移植教程,在主函数中加入RTT的初始化配置。
SEGGER_RTT_ConfigUpBuffer(1,"JScope_u2",buf,2048,SEGGER_RTT_MODE_NO_BLOCK_SKIP);
然后创建一个定时器,利用定时器定时向J-Scope上位机发送数据。
/****************************************************************************** * @brief * @param * @retval * @attention******************************************************************************/
void TIM2_Configure(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_DeInit(TIM2);
/* Enable TIM2 Clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* Config TIM2 Every 1ms Generate Interrupt */
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Prescaler = (RCC_GetSysClockFreq() / 1000 - 1);
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = (1000 - 1);
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Clear TIM2 Update Flag */
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
/* Enable TIM2 Update Interrupt */
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
/* Enable TIM2 */
TIM_Cmd(TIM2, ENABLE);
/* Enable TIM2 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/****************************************************************************** * @brief * @param * @retval * @attention******************************************************************************/
void TIM2_IRQHandler(void)
{
/* Clear TIM2 Update Interrupt Flag */
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
SEGGER_RTT_Write(1, &g_SineWave128[(i++) % 128], 2);
}
在主函数中初始化TIM2的配置:
TIM2_Configure();
3.1.2 J-Scope上位机配置
RTT模式的配置与HSS模式的配置类似,但是在J-Scope Configuration选项卡中的Sampling Source界面选择RTT模式,在RTT模式下不需要加载可执行文件。
配置完成以后运行可以看到J-Scope上位机打印的波形。