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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑 " c$ Y, U8 T" O8 \5 @6 F$ p

3 r# i! `' z% D/ ]2 ~0 m遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。* O& ]1 i8 z! Z- e0 D; x7 O5 ~
首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。/ m% d# f. T/ K
8 V- ~; [* G' i' G. }: s3 h5 d
导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。/ Y7 d$ p6 c9 \% |
02.jpg , {! A0 X8 a! I9 f: ~  l
03.jpg % n1 R. d8 k* T, u

8 \% I8 G/ V- X+ j3 T1 ^4 y; Y. G7 ^# @! b0 \
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。
& ^( T$ b, x$ V& M# h9 C0 h2 a! n  F- \0 K/ V  t$ a
Cortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。  n" Z0 n+ I4 L; }' K
(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)1 ?& F* i7 [# Z: i- `. Z* E- g
; y- K4 K( b+ x. x5 ^4 B  r; ^) h
01.jpg 1 Q& l" Z" J1 \. n- l

8 U9 y3 N9 X) ^下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。: K( _+ ~& u6 s1 d# a
( Y, h# I+ P- U/ l$ s- S
1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:
7 a6 i6 H# g( |7 G-------------------------------------------------------------------------------------------
/ k& B+ W" B8 c1 g7 r' cLOG OFF
. W% M4 @$ }; l- t/ R7 x) ]( UFUNC void Reset_Target(void): s; G; n9 Z" q# ]8 p2 [; E: E5 y/ N
{- @! {& T( q3 }
_WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command
& H+ S. f  G! r8 Z" z- a2 U8 N  printf("\nApplication running ...\n");
; k& q  h9 Y' W# e% M3 l# f- C8 U}" |% F- p# G: Q4 Q! g2 r' m
Reset_Target();   //run
3 j4 u) _* X9 F# F0 A# REXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令) r0 b3 t' t8 O8 N  O" Z! Q
---------------------------------------------------------------------------------------------
5 N* P9 r6 g/ V& Z; J
# ]: o: U/ X! [% }& O) Z/ n  A2. 在KAIL的环境下,导入此脚本文件:
% z2 F, N! E* s! ]- g 04.jpg
6 c6 L0 p; n" v5 \9 _  y: q" R3 `$ L1 v" }) ]( Y  A; i" G
3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成% a2 A4 [, o% Y. F3 v
05.jpg
' Z" Z; I" X5 J3 E$ D+ ]  r$ R- i7 r( P+ F( Y
4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
) F2 }4 |8 }5 Y: T, q6 z& ~  ~: W: G& S+ `- H
希望有兴趣的朋友,找到更加简便的方法。
$ O" ?+ a& V3 P7 i3 ?' g& v! g注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。5 v& M, }$ }3 y7 v+ e$ W  C* Y, l3 S
其他情况下,各种不同的,仅供参考。
! t9 y# O8 a. h" r2 k文中,软启动,复位,RESET,都是开始运行应用程序的同义词。 : i8 Y7 P; a. a; b! k9 n
硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。
- W0 f( ]) p! X5 B
3 J) m6 M. `! h8 j# s
收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:39: V* r: w+ d1 l( g7 \$ {
目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。
% f, t9 q% r; z9 |, m
' r1 F( b. u! t一楼的方法,可 ...
) I+ A* S6 ?9 Z& S. y
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。
8 h6 n# i" F3 l; L+ J0 z根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25# q6 Z2 z8 e$ M3 P
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...
: u- N3 G( n1 N" X4 d( m: E
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器- ~3 u; f! D7 `, V5 C
解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:258 q2 P8 e7 M+ N& X
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...
) f' C5 \! _- x0 }- X% H
我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。
# H/ {: _7 {& L8 d楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13
! N  u) C3 P: Q' C  s9 E7 |+ `6 [mark。
& j' v% [, ~# c6 H) \! J楼主研究得真细。
$ s/ B: m6 O; Z0 u5 b
这个问题就是您提出来的,我正在尝试解决。7 n4 Z6 h* B; ?
0 S8 U# P( v6 Z+ Y* c4 f# k
另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:1 k3 F; o8 o8 ?) a8 B8 e
https://www.stmcu.org.cn/module/forum/thread-616215-1-1.html: N4 B) _" T* r! |7 q/ x. O) |5 f
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一样完成软起动了。
# s/ F& g: F1 g$ ^
$ h' k. _: B3 O; ^  G; ~3 U一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09/ a; Y* o) _8 Y. K0 [% E
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
2 t4 L' S8 j! d3 H5 Y3 s解决方法很简单,程序代码 ...

+ `3 Y! `1 {3 R/ K" |! l这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:14
! `# T! H, {* a所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...

! ~* H# ]0 Q) h7 t手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27
5 [) l3 L" Y! \" }3 ]这等于关闭WDT功能。

5 T3 a7 S4 U: p$ G7 a" @- u没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版