摘要:不知道大家在單片機開發(fā)中是如何打印調試信息的,大多數應該是用串口調試打印吧,在大多數的情況下,一般在制板和寫代碼時都會預留串口1做為調試打印用。
但是在實際開發(fā)如果沒有預留串口怎么辦?其實我們的下載器是可以用來作為調試打印來用的,只是很多小伙伴不知道這個功能而已,今天就來說一下如何用調試器JLink來打印信息。
1、JLink仿真調試器
下載器五花八門,但是我只用JLink,小巧方便攜帶。對于單片機開發(fā)者一般所用的下載器基本就是JLink和ST-Link。這兩者功能差不多,JLink是SEEGER公司的,ST-Link是ST公司的,而且只支持ST系列的芯片。只用JLink下載器調試,原因就是這玩意體積小,只有四根線,用起來太方便了,YYDS!
J-Link OB ARM 仿真調試器
2、安裝JLink驅動
下載鏈接:https://www.segger.com/downloads/jlink/。買回來JLink驅動后,一般賣家都會提供JLink的驅動程序,驅動安裝完成后就可以下載調試程序了。
https://www.segger.com/downloads/jlink/
當然我們現在要使用JLink的RTT功能(實時傳輸Real Time Transfer,可不是RT-Thread操作系統啊),就需要在官網下載完整的Jlink包,最新版本的是V7.52版本的,當然別的版本也可以。下載完成后直接安裝可以了。安裝完成后你會在你的安裝目錄下看到如下內容:
JLink安裝目錄
3、移植RTT
安裝完成就好辦了,RTT源碼包就在我們剛剛安裝的JLINK驅動的目錄里面。我的目錄是:D:SoftwareSEGGERJLink_V644bSamplesRTT

解壓后具體的目錄是:D:SoftwareSEGGERJLink_V644bSamplesRTTSEGGER_RTT_V644bRTT

然后將這個RTT文件夾復制到我們的編寫程序的工程文件夾中

然后在項目中新建一個RTT分組,并將RTT文件夾中的兩個.c文件添加進來。


當然還要記得添加RTT的頭文件路徑

到這里基本就移植成功了,是不是很簡單,就是把RTT的源碼添加到工程中即可,完全不需要修改別的什么操作。
4、RTT打印輸出
接下來就可以打印輸出了。
#include"sys.h" #include"delay.h" #include"usart.h" #include"led.h" #include"SEGGER_RTT.h" intmain(void) { HAL_Init();//初始化HAL庫 Stm32_Clock_Init(336,8,2,7);//設置時鐘,168Mhz delay_init(168);//初始化延時函數 LED_Init();//初始化LED while(1) { SEGGER_RTT_printf(0,"zhiguoxin666 "); } }

編譯沒有錯誤之后連接好下載器
連接好硬件
配置為SW模式
之后打開JLink安裝目錄下的JLinkRTTViewer.exe

按照如下配置

將代碼下載到單片機中就可以看到已經完美的打印了。

5、RTT的使用技巧
1、RTT緩沖大小
有時候我們發(fā)現我們的信息不能完全的打印出來,可能是因為緩沖不夠,默認緩沖區(qū)大小事1K字節(jié),如果不夠可以改大一點。
默認1024字節(jié)
2、多虛擬端口使用
RTT支持向不同的虛擬端口中打印信息,使用方法如下。
首先在RTT Viewer軟件中分別打開三個虛擬端口:

編寫代碼
while(1)
{
SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_printf(0,"zhiguoxin666,SEGGERRTTTerminal0!
");
SEGGER_RTT_SetTerminal(1);
SEGGER_RTT_printf(0,"zhiguoxin666,SEGGERRTTTerminal1!
");
SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,"zhiguoxin666,SEGGERRTTTerminal2!
");
delay_ms(1000);
}
編譯、鏈接、下載,觀察現象:
窗口0
窗口1
窗口2
3、修改打印字符顏色
RTT支持不同顏色的字符顯示。

時用時在字符串前面加上對應顏色的宏定義就可以了。
while(1)
{
SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_RED"zhiguoxin666,SEGGERRTTTerminal0!
");
SEGGER_RTT_SetTerminal(1);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_GREEN"zhiguoxin666,SEGGERRTTTerminal1!
");
SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_BLUE"zhiguoxin666,SEGGERRTTTerminal2!
");
delay_ms(1000);
}
編譯、鏈接、下載,觀察現象:
紅色
綠色
藍色
4、使用printf重定向
項目中使用printf的地方非常多,如果可以直接修改printf重定向到RTT組件,則會非常方便。使用的方法是直接使用RTT提供的API實現fputc。
原子的例程
重定義fputc函數
//重定義fputc函數
intfputc(intch,FILE*f)
{
SEGGER_RTT_PutChar(0,ch);
returnch;
}
替換之前的代碼:
while(1)
{
printf("zhiguoxin666,printfSEGGERRTTTerminal!
");
delay_ms(1000);
}
編譯、鏈接、下載

結語:RTT和USRAT各有優(yōu)點,要根據不同的情況選擇,如果遇到一個顯示項目沒有預留串口用來調試打印信息,可以用這個的方法。當然打印調試還有很多方法,這只是其中的一種,如果你還有更好的方法,歡迎評論區(qū)留言喲~
審核編輯:湯梓紅
-
單片機
+關注
關注
6076文章
45494瀏覽量
670262 -
串口
+關注
關注
15文章
1618瀏覽量
82809 -
調試器
+關注
關注
1文章
328瀏覽量
25084 -
Jlink
+關注
關注
6文章
115瀏覽量
39522
原文標題:教你把JLink變成串口調試助手
文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
【RA-Eco-RA4M2開發(fā)板評測】使用Jlink的RTT來實現串口打印功能
DM8168的OSD算法中,用Vps_printf()不能輸出打印信息?
GT_Trace()沒有打印信息
串口打印信息操作步驟分享!
jlink-v8調試器的jlink接口與swd接口有什么不同呢
Nuclei_Studio運行N101_irqc_demo串口不顯示打印信息怎么解決?
jlink-AXD仿真調試實驗手冊
基于STM32中調試與串口之間的信息傳輸
STM32F411Cx 401Cx最小系統 JLINK調試器開源
調試器連接MCU不穩(wěn)定怎么辦?
jlink調試器的工作原理
如何用調試器JLink來打印信息
評論