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

使用CMSIS-DAP仿真器+KEIL,在不连接RESET线的情况下,软启动...

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑
- f* S$ m: ]0 |+ S# j( x3 `1 C0 L$ t% W* P3 x/ T4 ^- p3 K! c6 H
遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。
# G  W7 \3 J/ W$ R- |' J, p- `首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。. a* `4 C0 u! O2 p

7 f: N' _/ e4 L" Q! O9 }导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。; o+ `1 c2 F9 I/ S2 l8 Q
02.jpg
: @! i# z6 Y7 `, a 03.jpg / x# a: q' t" A, R# H

4 x/ ?/ S$ {+ H# \* X4 d7 b' F0 L# R. N3 z% q
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。2 Y# ?. M& p7 q( f) g$ x1 {& K

. z8 i& m  k6 l% P& I. w$ l$ tCortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。
% H8 U  _/ P) ?4 d" ]8 s% f(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。): ]5 G' {/ M. w- W. H8 t1 ^' z) ?3 I" S

: h% u7 }; p4 f% q! x& N 01.jpg
/ S3 U% M5 J+ F) T" W( J2 L7 Z7 y& f
6 v* m) `" j" ~, Y( d7 V下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。
+ A" S( f* R! _0 |8 U5 J8 g+ K: z7 n, }: K. U4 k5 c
1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:
2 C+ x7 ?- q& x, d9 k-------------------------------------------------------------------------------------------
7 @2 Q9 {+ C8 T1 F( j& Z9 }LOG OFF+ m: k( `' ?' N2 h+ Y
FUNC void Reset_Target(void)
- s* C' F1 i0 b( m2 {" F* i/ } {
' S) n8 V& l8 ]2 j3 m _WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command
  C. \  T; J7 K( m/ n1 i6 a3 {  printf("\nApplication running ...\n");
) p- U* g, S( [0 q( k3 @}5 ]. A* ^3 v- u" O
Reset_Target();   //run
) L, g. }' b( k/ g, D! JEXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令6 ?1 M; g) p' C2 X9 P$ }
---------------------------------------------------------------------------------------------2 G" h9 |7 O0 n; e: N6 I' [* g

* w0 m( \. y) C- b% h0 r# X2. 在KAIL的环境下,导入此脚本文件:- Z, z# O: j% v: F: z
04.jpg 9 Z1 [4 O4 o8 o+ M) f+ N# N5 }
+ L5 c' |/ r# B3 V. F
3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成。
- D- l8 n) c+ B9 Q1 z 05.jpg 6 K$ J4 }7 _" f1 T* ^6 P) z1 K
0 _5 L$ h! |$ o+ f$ h! t7 f4 a
4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
- W; o- `, l4 D7 Z  ^
6 i& D6 }; Z5 u; F8 [  \希望有兴趣的朋友,找到更加简便的方法。8 e9 f6 Q% z# t2 M8 E" y
注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。
( b" c# q, v% P4 H( k其他情况下,各种不同的,仅供参考。. R/ B8 m# j) O( T& {) y
文中,软启动,复位,RESET,都是开始运行应用程序的同义词。
7 P4 @& H( I4 b1 |" }7 ^) |硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。
9 T$ v) j& z1 b* o5 ]. }) ~# E) {) I1 K' R; `1 S, D# I, R, J
赞 收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:39( l  y4 {( q) |# j& b, e
目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。0 X( f) Z8 r: u5 h0 O! ?
5 l: B5 L3 @# ?- |+ V3 [) y2 U9 q
一楼的方法,可 ...
: I& ]7 x2 G0 a/ r% r4 [6 G" h
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。
( G- K1 P  |/ L5 @/ O根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25
/ Y; Y2 H3 J4 ~楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

5 n0 a  u1 z& [* Ljlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
, ]. E, x: [3 O# _- w* }& E, \解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:25, O( b. M- @" T( y0 {( _3 D
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

- i1 r2 `6 K7 z3 A# J/ d我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。
) y* p/ v8 ?2 H! m2 [" l4 a楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13
! \; \' Y4 [; N3 Q0 l/ Dmark。
5 L9 Y# z+ I$ I6 q楼主研究得真细。
: `$ _5 R3 K# h4 a9 b
这个问题就是您提出来的,我正在尝试解决。
( N; K( N0 l$ M  q" G  ]" p& @7 v4 r
另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:
7 ?% `+ n8 w" m8 u! Q1 Y: A$ x5 l0 Ohttps://www.stmcu.org.cn/module/forum/thread-616215-1-1.html4 {3 L4 n  V3 O! I: B4 s" h
spmno 回答时间:2018-6-12 10:23:32
支持楼主,研究的细,还写文章推广,值得学习。
vitasnokia 回答时间:2018-6-29 17:25:33
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗复位,而用这个dap仿真就会触发,请问怎么解决了
waitshare 回答时间:2019-7-22 22:08:14
6666666666
bird0123 回答时间:2019-7-25 09:31:20
感谢分享
radio2radio 回答时间:2019-7-25 11:39:59
目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。( j7 u4 v- d; o% g

$ ~; z7 r7 @0 d  U一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09! m6 p; ^; [  {
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器, v: e: K/ F6 a. T8 a- h$ [
解决方法很简单,程序代码 ...

! c& C' y5 {7 I2 Q% q这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:149 ^8 r* k/ e9 ^8 y+ O% U
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...

7 i% B( A7 k- `7 s5 g" |8 E手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27* m7 d1 A& }% ]
这等于关闭WDT功能。
0 I) w" H8 j5 G; [
没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

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