目录
前言
环境:
芯片:
Keil:V5.35.0.2
一、代码准备
通过网盘分享的文件:Jscope.7z
链接:https://pan.baidu.com/s/1y_KDlPv8L8A1YQNjoGFWmg?pwd=5q2g 提取码:5q2g 复制这段内容后打开百度网盘手机App,操作更方便哦
将文件下载并解压
将文件放到工程内:
添加注意事项:
需要将头文件包含进去。
代码编写:初始化代码
uint8_t buf[1048]; //定义全局变量 int main(void) { SEGGER_RTT_ConfigUpBuffer(1, "JScope_u2u2u2u2u2u2u2u2", buf, 1048, SEGGER_RTT_MODE_NO_BLOCK_SKIP);//初始化RTT模块 while(1) { //... } }参数说明:
第一个参数:索引值,好像都是1,
第二个参数:类型:char* sName;这个值有讲究,所以我传输的值是8个无符号16位数据
示例:
如下,是在100us中断中增加的带有时间戳的代码,增加后JS cope中将不在有Symbol No 0
但是将会有时间,注意,增加的单位是us,如果放在ADC或其他不确定时间的中断中,时间将不准。
SEGGER_RTT_ConfigUpBuffer(1, "JScope_t4u4u4u4u4u4u4u4", buf, 1048, SEGGER_RTT_MODE_NO_BLOCK_SKIP);//初始化RTT模块 void SysTick_Handler(void)//100us中断 { rtt_data[0] += 100;//中断时间必须准确。否则后面的时间将不准 SEGGER_RTT_Write(1,&rtt_data,32); }第三个参数:定义的全局变量名
第四个参数:定义的全局变量大小,需要一一对应。上同
第五个参数:RTT模式固定参数:SEGGER_RTT_MODE_NO_BLOCK_SKIP
数据传输代码:这个代码可以随处放置。看需要,如果放在100us中断,则频率就是10K。
uint16_t rtt_data[8]={0}; rtt_data[0] = 0; rtt_data[1] += 1; rtt_data[2] <<= 1; rtt_data[3] += 3; SEGGER_RTT_Write(1,&rtt_data,16);参数说明
1.固定值
2.调用数据地址
3.每次更新的字节,配合我上面的8个16位数据
以上为代码部分。
二、J-Scope设置
1.
1.选择芯片型号,如果没有自己的芯片型号。看下面的操作步骤
2.速度,最好选择高速以便兼容。
无芯片操作步骤:
在打开的快捷方式路径里添加: --rttsearch "0x20000000 0x2000"
注意前面有一个空格。
参数说明:数据来自芯片的大小,根据这两个数据来修改就可以了。
2.直接开始
连接芯片,通电让MCU工作起来。然后点击Jscope开始。
Jscope会自己搜索RTT的参数。
因为是上传的参数,所以程序的变更也不会影响搜索的参数。