STM32有两个调试端口,即JTAG和SW。Keil 的ULINK2 USB-JATG接口适配器支持这两种调试接口。. R' n% \" m) ^8 j9 M+ U2 G& T% y* Y5 M" J+ {/ V6 |5 ` 本文描述了如何配置和使用SW接口来获取各种调试信息。* h V& U: ^7 I ; `, t1 o6 J- y8 D0 Y, f' Z 一、目标调试阶段的配置 1.调试器的选择 1 @. [" E- J/ a- Q& z 选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。2 \ o) o5 k5 z# j/ I* ~* R % M* k5 S. ?5 A; P* u2.调试目标初始化文件 按照路径\Keil\ARM\Startup\ST,将文件STM32DBG.ini拷贝到工程文件夹中。选择μVision->Debug -> Options for Target –>Debug,同时在Initialization File选项中选择该文件。 ![]() # O! p& I: C8 C( m 3.Cortex-M 目标设备调试驱动配置, a9 k/ Z- L$ r 0 Q* J4 R$ N( A% a7 k7 [: c/ i5 d 选择Options for Target – Debug – Settings,设置SWJ,端口选择SW。 5 z' S" r* J b- w- [3 z, b) H \. l" f9 }' ` 4.Trace功能的配置- U2 @, s! g2 @' E5 ]% W Trace功能包括:Core Clock, Trace Port 以及定义TraceEvents 等。 ![]() 3 p6 I- m. M+ N5 W; c: C+ G' S 二、实时跟踪 1.μVision的状态栏信息 4 u; c3 O1 \- m: R; [: r 在μVision的状态栏中显示了实时跟踪的状态信息。; r/ C9 W# X7 m. p' Y( m 2.实时跟踪窗口 7 i0 C( O. c8 f5 C$ Y1 N 调试时选择Peripherals – Trace。3 k3 X/ w) {1 p5 ], d# z' J! | & Z' _ E0 [9 k( J8 v% l6 P1)Trace Records窗口 ' x* X! g" ~ p. v- G( E0 ^; C/ W3 G 该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。可以选择Peripherals - Trace – Records来查看。 ![]() 2)Exception Trace 窗口& n, @5 Q/ X, ^/ k+ j* d 3 t/ A9 T" M0 p( z. C% I/ | 该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。可以选择Peripherals - Trace - Exceptions来查看。: a; g. h+ ?+ ]- | . v0 p# Y8 }% F2 i) h1 J* S$ ]3)Event Counters窗口0 r* X8 p3 ]8 }/ k6 z$ X/ b ( b3 V& W/ h2 c% T4 X 这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。 $ \" h5 u- V, t. u: ` I1 T* A" b. V* [; q6 i' L" F7 J8 _: J0 x3 W 3.ITM Viewer窗口 可以通过ITM的激励端口0在ITM Viewer窗口上输出ASCII 或 Hex格式的数据,目前只有ITM 端口0可以在ITM Viewer窗口显示。要使用ITM Viewer窗口来显示调试跟踪的输出信息,需要进行以下的操作。 9 g' ~3 w' k2 [2 P3 J l 在源代码中添加ITM激励端口寄存器的定义。 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))& i% I1 h# `) x #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) #define DEMCR (*((volatile unsigned long *)(0xE000EDFC))) #define TRCENA 0x01000000 l 在源代码中添加fputc函数,它向ITM的激励端口0寄存器写数据。如果有了fputc函数,则可以用printf函数做为调试输出。ITM的激励端口0与ITM Viewer窗口固定连接。 struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout;3 p9 B. u) r& E8 Z4 K# p FILE __stdin; ?/ ]9 y, l% k int fputc(int ch, FILE *f) { if (DEMCR & TRCENA) { while (ITM_Port32(0) == 0); ITM_Port8(0) = ch; } return(ch); } l 在源代码中添加printf函数来显示调试跟踪信息。" n0 J1 C; a' s* t printf("Serial Wire Output Debug Trace message"); ! f A6 A$ G/ h. S l 在Cortex-M Target Driver Setup窗口中使能ITM激励端口07 \# }- v# U& e ![]() , K3 {& X1 l# H3 S% ? l 在目标调试期,打开ITM Viewer窗口8 M/ h7 J J' m, }# R9 _4 S 7 ~- D* K4 ]# ^6 q! D- H" { 选择μVision-> View -> Serial Window -> ITM Viewer ![]() # B2 U" w5 M! |' R9 v$ Z! t 完成这些步骤以后,可以在目标调试期通过ITM Viewer窗口查看到调试跟踪信息,例如显示AD转换的结果。- V6 B' B9 I9 d ![]() # A' C( y$ V' V% F' c ITM Viewer的功能类似串口打印调试信息,使用ITM更简单,而且不需要串口以及相关驱动程序。 4.Logic Analyzer 窗口' A/ {7 \, y+ a3 ?" j 在调试的时候,可以通过逻辑分析器观测至多4个变量值的变化。执行以下步骤来使用逻辑分析器。 ; n9 t9 r9 Q+ l% ?5 {- ^" B/ l/ O$ b · 在Cortex-M Target Driver Setup窗口使能Timestamps并选择合适的Prescaler值。 ![]() 要想在逻辑分析器的窗口中观测到精确的时间值,必须使能Timestamps。' s6 ~0 ]7 D6 q8 P3 i0 N 1 }1 a) g- h% L0 s B · 添加准备观测的变量到逻辑分析器中, A8 E. a4 ]! G0 z; u Y- a, h · 在调试过程中观测变量值的变化8 t7 @6 e* V! a5 v0 o$ H* _ ![]() ) a% a( D+ G9 w/ S8 k/ o% v 5.RTX Kernel Event Viewer 窗口: v# {1 Z0 n5 N2 Y; ` + K9 l; ~6 n1 e 当运行RTX系统时,RTX Kernel Event Viewer 窗口中显示了任务的切换过程,任务切换信息通过专门的ITM激励端口31来传输。 / s6 d( c$ _1 U3 l- j8 Q' o, ^ 执行以下步骤来使能RTX Kernel Event Viewer。 · 在Cortex-M Target Driver Setup窗口使能ITM 激励端口31 ![]() · 选择Trace Enable,设置正确的Core Clock。& k6 q# K* H5 W0 x, ~; A R ![]() 6 w( W9 o' d, U' I( z) F1 B · 核查Timestamps为enabled. ! u- z1 `( L/ x1 X' U· 在目标调试过程中打开RTX Kernel窗口 选择Peripherals -> RTX Kernel / k7 L+ h5 X6 ]" v8 A, B9 l; A8 H) q0 r( o( o( c z · 在RTX内核窗口选择Event Viewer标签 . `5 e( z7 h8 d D- k& Z ![]() 在窗口中更新了每个任务转换过程。选择in或者out按钮放大或缩小窗口。点击all按钮可以显示所有事件记录。 Z( H' l3 p+ W9 P5 C ! Y1 d) H l) E7 K) D6 h 出处:小野狼 |
微信公众号
手机版
回复:使用RealView MDK进行SW调试和实时跟踪
RE:使用RealView MDK进行SW调试和实时跟踪
RE:使用RealView MDK进行SW调试和实时跟踪