你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F10XXX(Cortex-M3) MDK-RAM-keil + J-Link 在线调试 笔记

[复制链接]
kaierwen 发布时间:2016-1-18 14:44
1 程序调试方式

(1) 使用SEGGER J-Flash(J-Link)下载程序到闪存中运行。

(2) 使用串口ISP 来下载HEX 文件到CPU 中运行。

(3) J-Link + MDK 组合,来在线调试程序(可下载、单步调试)。

/ t; R$ `( a* p8 P

下载:是将具体的文件如.axf或HEX下载到开发板的flash(SRAM)中去,在开发板启动之后就会运行所下载文件。根据运行结果再将修改的程序下至开发板中运行。


* v5 I- N6 ~4 c$ w2 n. d; Q
  • 通过J-Link下载.axf文件时是在J-Link开发板与PC连接好后,通过点击KEIL中的“load”按钮将.axf文件下载到开发板内。
  • 通过串口ISP下载HEX文件在C51中常见,如51下载程序到单片机内。9 u, a; H! K; M0 ~4 D# |

2 f$ C6 S) |1 V0 _" ?9 Z! c

' e& F- S% a$ Q3 K
; I) @' `8 V2 |

在线调试:通过调试器(如J-Link)将开发板和PC相连,既将程序下载到开发板中运行又能看见程序运行的结果(如变量的值)。


4 G$ j9 g- Z2 E- q; W4 n
$ h- s4 r! y& W8 ?) l3 m2 MDK-RAM-keil + J-Link在线调试(1) J-Link + 开发板连接PC
8 W' i( Z: \1 J6 o
7 b6 C7 U0 V6 }& q9 ]
Figure1:使用在线调试工具J-Link
. A5 E8 G/ e4 N
4 c4 s- ?) @+ u- ?4 _2 y  R* r

  U: p# B, X: {
) X3 q4 e. e) Z( B
(2) 设置项目编译属性因为是使用J-Link在线调试程序,需要选择J-Link调试工具(建立工程的时候如果设置好了就不用再设置了)。如果J-Link连接开发板的接口为JTAG则PORT要选择”JTAG”。如下图:; Q' x: u/ K/ @% z4 M  i

0 o' y& K2 ?& d; R% p! }, s

- v/ i" g% a- X: m
. m! v( r3 O5 \( U( B
Figure2:选择J-Link调试器
4 B% W& f  x( S, z8 ~  Q, l
& B9 c/ ?6 v. r; N+ e/ \0 `
如果“JTAG Device Chain”处有内容则说明检测到了设备。
  e- u. I# F: T6 N% |( }" K
/ }6 ~) v6 X6 z! I/ w
$ W; y. ?( H' ]" Q  R5 k" n
' [* S3 O! [+ U4 Z5 X5 b# _

. L  \8 |! g% J( ?' s3 b9 G还需要在Utilities选项中做一些设置:
# v+ p& W/ d3 G& s# E  Y9 A

$ q$ I  s; N0 B  {$ Q
: I* G  s" a4 Y& g7 W. G5 F* G

" O2 J8 O$ s" }' K: [
Figure3:Utilities设置2 r, K% x  i) D8 s/ U' _; h. h7 v

: o" ]* Y, k; n: {' X; S在”settings”中,点击”Add”按钮时选中开发板的控制芯片即可。然后点击OK保存。现在就可以进行在线调试了。
* f0 M! Z/ D; a8 Q4 d
. X2 E2 M/ c- Q0 j$ K. m, M. e" z

9 H4 F. s, \/ Q4 ]" X+ s6 ~(3) 在线调试[1] 单步调试开始调试' u8 J9 k; S) V

; J/ J' ?/ m+ C! j9 U

# U# u* f# i9 ?1 t& M
" w- A' B$ A0 Y/ ~+ t程序经1编译通过后(第一个按钮表示只编译当前处在编辑界面的文件,第二个按钮表示编译整个工程中修改过或还未编译过的文件,最后一个按钮表示重新编译所有的文件)。确认J-Link连接完好,开发板已上电后,点击2中的按钮开始/结束在线调试。
0 v; o& M8 B4 L' n- g% |: R6 A

) i1 J/ q& s7 q6 q

# C+ u) J! E/ }3 H7 `- O

1 S4 R* r- x& T
Figure4:在线调试开始
; D6 O2 E5 |. n6 _5 r3 R
; A1 G: A# ]* H- j
1:绿色图标表示光标所在的行,黄色图标处为要运行的下一条语句。在线调试开始时处在mian()入口处。: O4 |* V! a" ]. ^
2:这是调试开始后弹出的窗口,watch窗口用来观察程序中各种变量的“值”及“类型”,可以在watch窗口中手动添加待观察变量。3 H' W; V% ]7 i! N6 r" p
3:程序中的tx_data为具11个元素的数组,从值可以看出来程序还未运行到175行处。7 d8 O0 F9 z5 A' a
5 L' W9 ^2 i- o0 C: o

' }2 y9 r6 j5 n7 j/ ]3 T' p* N2 B- ~- G5 ?& d
单步调试按钮单步模式下可以点击以下图标让程序往下执行:& F' `  s. w5 B  E3 I

3 e3 S* x' r, T9 I6 |
0 {( S& U* V3 k) H$ Z" v

5 B$ e" P0 ~0 F0 M: F8 V以上几个图标对应的快捷键依次是:2 ]# W+ T. E& M+ f3 E- q7 |
  • F11:                单步执行,每次执行一行。
  • F10:                跳过当前行语句。
  • Ctrl + F11:         跳出当前函数。
  • Ctrl+ F10:         运行到光标所处的行。+ C8 |& ?4 \0 j6 c8 r

+ Q! c# E3 Y# C! C
" `) H. p2 L2 [# v5 \
按F11到176行时,经执行过得tx_data数组个元素的值就在watch窗口中显示出来。% n6 J) F; B0 f: l, Z- L

) {& A" o* `9 l/ O. Q& _. K$ M9 m, L2 ?+ L
工具栏窗口在“在线调试”状态下,许多“工具栏小窗口”会冒出来。
7 v# u% A4 w: ^+ D! C% C* G4 |. e- [) j: q
在红色方框内的几个小窗口从左到右依次是:
, _8 S& a* \$ v3 I9 g; Y" x: s7 Y
  • Register Window:    用于显示各寄存器的值,并显示运行时间。
  • Call  Stack Window:       用于显示main函数内的变量及所调用的子函数地址/值。
  • Watch Window:    用来查看特殊变量的窗口。用户可自行输入某个变量名,根据程序运行的进度查看其值。
    4 b. v$ \+ L8 f, `7 i5 R: g
其它的窗口也有其特殊的用途,在对其有需要时可以打开瞧瞧。打开和关闭这些窗口的方式都是点击一下图标的方式。0 t9 P+ N9 |: H  O% t
* W' Y+ u+ {' P/ z9 [1 \$ W
8 w$ _: h% ~1 v1 J; ~
查看寄存器值
  • 进入调试之后,点击"Peripherals",然后选择要查看的寄存器名称。
  • 进入调试之后,点击"View->SystemVier",然后选择要查看的寄存器名称。
  • 进入调试之后,点击"View->Watch Windows"或者点击工具栏,只输入指针所指的寄存器的名称。
      ^: G, E  f% d* J6 S. o

1 \( _& o7 ]- l/ Z6 B
0 r+ V. R( {3 X" p* W. i: [, ?
[2] 设置断点调试单步调试毕竟是单步或者跳过函数的执行。在程序十分庞大时,F系列的键或者鼠标都要被按坏,设置断点后,程序运行到断点处就停下了,然后就可以再用单步调试的方式进行调试。7 ^+ W, r- O7 W" T8 J
/ x; w6 ?9 I5 Q" I

$ y  Y+ Y& e: ?9 p% d开始在线调试点击调试按钮开始调试,如图Figure 5。% s6 J8 I5 h0 L* R( ]2 P9 K. x
- A4 w9 c' q7 d! g
断点设置到想要运行的代码处设置一个断点。设置断点的方法:
# J" d6 I7 x9 A' {/ X9 U; }
  • 在源代码行号前双击。
  • 用开始/停止在线调试旁边的图标。
  • Debug >> Insert/Remove Breakpoint(F9)。
    $ X' e" {1 H" d7 w
* w. s- O$ _( \9 n% b
使能/消除使能/移除断点的方法也是以上列举的3点。% \- d6 J9 X( Z& D' Q. G: I5 a% D
' u& A, O; f  C
$ `5 {  Q5 y; W$ O# t
点击Run         
  • Debug>> Run(F5)
  • + `3 a8 @; g9 w( @
经以上3个步骤后,代码就从上一次代码停留处运行到断点处,结合Figure 4看下图。
4 {7 d' w+ I8 X3 P! Q8 h9 ]# g! q. N" h7 m1 a  {' ~

7 t8 `6 b; r$ N% f3 P

4 s4 Y  `0 ^2 f7 |4 B' _2 F% {2 Q
( g# |. W% Y, }/ `+ s. j; u- I
Figure6:断点处5 W+ s9 ~" ^5 G  i$ L" D; \4 s
; w' V. p/ s1 S) n# v# q1 k  X0 S

) {& g' j' e5 e0 j3 C基本数据类型占内存大小查看将以下变量声明为全局变量后,在Watch窗口中观察的各变量的值。
( M3 f) W, ?2 s
4 S# ~/ G( e: f% Z! P  z
         cl      =sizeof(char);
1 R6 x9 B6 ?% y2 t. M; a( C7 Y         ucl    = sizeof(unsigned char);
5 x. F  ?0 d" G0 X0 U         scl    = sizeof(signed char);! t0 N* t+ x% O+ o0 q3 p
        / i: i; q- J. X. I- [  m7 A
         il       = sizeof(int);
$ B5 X7 h# l: _         ui     = sizeof(unsigned int);) \! [9 r& M6 {' O/ [5 F
         sil     = sizeof(signed int);
* Z+ X3 h( H# o        2 @' d1 z' i" G% l9 l8 Q" s
         ll       = sizeof(long);
! n  e( D7 B; O" w* {9 k         ul      = sizeof(unsigned long);
, p$ U* U) _$ N* h+ c6 _4 Z9 w$ p         sl      = sizeof(signed long);
, N) ]; C: S" C( x2 p5 J& L         lll      = sizeof(long long);
6 }  b; y3 B( a; j        * H& m$ h+ M, g
         fl       = sizeof(float);
3 f. s; T( ~: `5 N+ `& ^        
5 n) u1 R5 x) z5 _1 K1 a         dl      = sizeof(double);2 a0 A% }9 x! v: O0 \$ z: Y
         ldl     =sizeof(long double);
- z% b' O0 @) n2 ?

7 [) z) H2 e, S$ e2 gWatch窗口中各变量的值:5 B- m+ o9 Q# j" R) h, O
4 \1 @& v5 A" L' ^* `7 C

( \$ H) @  p' v/ {0 E1 }9 v

7 }3 H  E3 R0 Y& d$ Q# j1 E2 B# k
Figure7:Cortex-M3 C语言基本类型大小
$ }+ F2 i# k! ^. m" z; V3 \9 B

4 ?6 d6 `6 ~7 x1 x8 R/ L" ^, X
& o% ?# m/ h2 n; v9 B在keil下的编译器+stm32f10xxx芯片下,char占一个字节,int占4个字节,long占4个字节,long long 占8个字节,float占4个字节,double占8个字节, long double 占8个字节。- D0 U" q8 B# H& ^) I$ r: ~; ~& s

+ |. n, P5 v+ X$ L% b. P' I

/ g% i" R9 \/ @% q. X7 e: V
' s* ^& b( s3 H0 ~
赞 收藏 1 评论7 发布时间:2016-1-18 14:44

举报

7个回答
沐紫 回答时间:2016-1-18 14:51:46
谢谢楼主
JackieLaura 回答时间:2016-1-18 15:46:18
谢谢楼主分享
stmcu.org.png
moyanming2013 回答时间:2016-1-18 16:52:02
有想法           
夜雨声烦 回答时间:2016-1-18 18:43:46
没有在RAM中调试吗?
disheng4688 回答时间:2016-1-19 09:26:52
谢谢分享
党国特派员 回答时间:2016-1-19 11:30:44
入门不错。。。
darren_liu 回答时间:2016-1-20 09:35:10
好详细的图文教程,顶一个

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版