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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑
4 ^* q4 l* S% N" _# ]1 S9 p6 x* S* c) Q4 C; ?; e; F: q0 o$ b
遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。  g6 X) s+ V. Y
首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。( c' A- H5 s- ^. i7 j  s

6 f* l1 U: ]9 }2 x& Z2 P0 H0 ]( ~; P导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。! g, w) Z8 ^7 d% O  E' }4 \
02.jpg ( p; x4 E5 s# l, S
03.jpg
; m, {+ J% ~2 O% B/ `5 f& N
: O% ?. t" t" N3 O* X& L$ h4 n1 B+ Z; \+ c
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。1 s0 r, \3 i9 Y
3 S4 M: V% V4 t# C  _
Cortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。
: t! p+ ~  p7 ]/ E1 v1 Z(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)6 Z! J8 K1 I5 G" j& \* G) l! u8 \
, P' i8 D% H* v: w  I6 f& x
01.jpg 3 x# N$ _0 n1 i7 I# D6 R
* Z' N( Q! m( l% \6 `
下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。
  i8 t0 u& s0 Z' W' z, P% @+ {3 H7 m& P) s
1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:! @0 T7 P" [. X
-------------------------------------------------------------------------------------------
; \2 X/ T3 b8 O9 H) n7 B9 l' NLOG OFF
+ v8 q' f' ]( I! U6 t+ m1 c% TFUNC void Reset_Target(void)
# S+ t# ^7 C2 @  ~8 k {
; j1 ?  r5 L) d8 D1 x' ~ _WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command. X! r3 }8 z: `+ D* V9 E, U( b4 w
  printf("\nApplication running ...\n");, T1 m: T  ^' f
}6 J1 q9 ?: e: |$ Q% L* v! ?
Reset_Target();   //run! b- u2 G9 n; M5 i
EXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令; W% T6 D6 b3 W1 U0 x5 E- S
---------------------------------------------------------------------------------------------
* u5 r9 j' ~! b- f' B8 a) o5 i% ^1 S: j. x
2. 在KAIL的环境下,导入此脚本文件:, C$ N% B9 L8 d! |' J7 J+ D7 X
04.jpg % G+ w5 |' |" w* W; A8 {8 ^
( ^* M) B  e9 }9 a- Z: F; T, |
3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成
/ G* `( G! d7 y1 D! \ 05.jpg 5 a6 M/ }" E  ?3 b

5 _  N& N( K. v& ]4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
2 C) Q; |2 A) l; X( U
" Y6 F2 k) Q( ~: q. E. g0 X3 L# U希望有兴趣的朋友,找到更加简便的方法。
0 H+ b; {* e# U" Y注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。2 a  a7 W* m4 d; h
其他情况下,各种不同的,仅供参考。4 F$ C2 D& {+ v
文中,软启动,复位,RESET,都是开始运行应用程序的同义词。
2 A# G3 ?; R& w" C硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。
7 N) O+ t+ ^. ]$ D, d5 u* r% O% t1 K' J2 O$ A  D) m
收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:393 x% e6 G# [3 o  Q2 B
目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。6 H5 n5 X7 b0 i3 L% j4 H

1 _+ \( W  H* J; g1 w3 S3 W/ f一楼的方法,可 ...

) q) o9 {9 ?8 Z( J! J+ J% m# S所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。' h% V2 I2 U5 t8 H$ v8 ^! a
根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25' N* A6 H! ~4 @* @5 c5 L
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...
2 J3 f; U% K! T6 _* ]& b
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器9 O! n" d2 l* E8 e
解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:25: P* A& z  i9 K" Y2 K
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

+ q' k: p- s1 g# y我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。' u" }, U/ i( w5 h, Q
楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13
, r( C7 }/ O' jmark。$ r2 w  Z8 E" P2 S5 i" R5 J
楼主研究得真细。

; }3 @7 E8 q# d* ^3 ]  ~4 N这个问题就是您提出来的,我正在尝试解决。
/ g. G" e+ B; A& D: c( D
5 T$ b) r' O$ Q( g9 g% B- {另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:
& l  q) K9 ?# k/ o8 Vhttps://www.stmcu.org.cn/module/forum/thread-616215-1-1.html
8 _: ~; N5 l3 n/ G$ _/ K. 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一样完成软起动了。
5 ?* G  O$ m% m* L8 {
" y( X. ]4 K  v" Q9 O9 h- i8 O一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09: |# S2 O+ G) O4 `2 U$ g- n9 }# J
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
7 O7 t) D6 ^: y0 ]1 H解决方法很简单,程序代码 ...
3 x" O7 r) v: \, z1 d6 s
这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:14$ `  G# W9 u- w0 A
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...

9 c; u2 d3 z6 R$ h1 r, X" j8 f  G; J$ w手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27
* z8 {( d( {2 l+ Z' ]$ u0 G$ o这等于关闭WDT功能。

) a+ K" x# P: n( x没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

相似分享

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