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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑 6 O9 N, C" M( e/ ?

/ l) v8 Z6 f" y! M遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。; F% T. D1 r2 k( B6 i+ k1 k2 E
首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。
( w8 R4 I9 V8 Y+ z3 i+ u3 E: ?$ ~4 R- D  S" q
导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。
" j/ m, l% k+ V4 i 02.jpg ( U. ~! }$ {2 d) q- r; g6 ?
03.jpg 4 J! ^$ K  X5 N9 ?+ N( [. Q3 k. M
/ F3 l  x) |* `9 J/ D

) `& b; ?! `2 S& u9 u# P8 i# kMCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。; Y4 w: C% H* @

" e) N! Q3 z; v, C1 zCortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。
0 ]$ w2 n- k& F9 s(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)
3 z" o( C9 v4 ~4 @) I" R4 j& x
. g) u  I8 A# r" b0 \* ?" a: K4 { 01.jpg
1 s+ I+ h8 [$ t: m" O
% M8 ^) }) Z4 H1 ?1 M$ U, F下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。, N, Y- Q5 _' p6 Q

) x8 o0 _4 M9 R; b" ^7 }1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:
* I- k* I9 Y1 N# t-------------------------------------------------------------------------------------------4 _0 s$ M) _8 F. \2 d+ p) z
LOG OFF* }" f$ e6 t+ j' f
FUNC void Reset_Target(void)' d1 j3 O% C' h# G
{! N. k4 h1 r8 J) _
_WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command1 g- d# k7 @, K( R4 B& Y+ d% |7 o$ V
  printf("\nApplication running ...\n");
9 P# e( l) U2 ~  ~$ O+ V5 ^3 ~* e* _}
" K& }  F4 H! e. FReset_Target();   //run
' Z% F- ^' l+ D6 `- V! Z) nEXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令6 @. R8 J. c5 g, F0 T. W
---------------------------------------------------------------------------------------------
4 y! I, K" ?0 l
# E. I- r/ R, _2. 在KAIL的环境下,导入此脚本文件:
& G) k% }9 G2 T& K1 I 04.jpg
5 m! ^% T3 z# a) U' b) m' M4 V; A2 L0 K: H4 O+ D1 a
3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成2 c( @5 O1 j. w
05.jpg
  ^2 r# E0 h! X* Y
9 ?7 W2 V" r1 H8 X* M' w, N, E4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
0 k7 T" z3 H  i# _4 o& V0 G* T, S6 ?: t  _
希望有兴趣的朋友,找到更加简便的方法。6 J# ~, M: B9 n& X' K
注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。
, ~/ r. [& J, S" g其他情况下,各种不同的,仅供参考。
, X7 G# K. g% E5 W/ g文中,软启动,复位,RESET,都是开始运行应用程序的同义词。
' ?, ^9 \! d5 Z6 o+ h5 P5 m硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。7 y7 c! O8 ^8 x5 O% ^+ B

7 C$ L3 ~! L3 U2 d7 ~* M
收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:399 H# E& o3 l3 {% u; d
目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。
8 B' l0 m( Q# I* b
4 v7 u" [3 `; V* E一楼的方法,可 ...
- c& p$ K; J+ j" v1 O
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。+ \# [" A3 \# o% i. H
根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25+ }( [& p/ T7 C( n
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

+ l! ^+ w: K) a. Q7 `. |$ s! cjlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器" l9 R  X( T; \. B3 M( U0 H
解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:25- B- |+ G3 O' L5 e! \( k
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

9 y+ s$ t2 }# v: m/ Q我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。
7 M) _& L  ^7 J  y2 {( Q% J楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:139 C) [' B- {* y0 i
mark。# @5 C/ q& j' w' n2 B" k7 Q
楼主研究得真细。

% E, O( z. L: E* C这个问题就是您提出来的,我正在尝试解决。4 k1 }8 ?+ [5 D* O! s$ P

& r# j) r' d( `5 A5 }% D* s# F另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:7 |" x8 ]6 p9 \  L
https://www.stmcu.org.cn/module/forum/thread-616215-1-1.html4 U) W% E" b2 G
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一样完成软起动了。
; h3 Q' g, ~8 K) Z8 i) B6 |" @
) \% Z* M( W1 G) H  i6 Q一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09
3 Z1 `& H0 L# y7 |; S( ]& k% D+ Ljlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器7 Q% t! W0 o! d* `" \- y
解决方法很简单,程序代码 ...

+ f6 t7 i# `; R/ h& i8 v% z这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:144 L6 d' S) O$ Q; Y3 O, h0 ^
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...
6 R( c5 |7 g2 o
手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27
, S9 q( I' u0 |! ~) M" G这等于关闭WDT功能。

& T8 L5 r- a- P1 [3 u- D没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版