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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑
* c1 ?; t1 v' d) D7 b5 i
0 O3 V) H' \& c' C. ]7 Z; J: }遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。0 U! R' }$ [9 J0 y5 Q( @
首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。  ]3 A* Q  M; ]3 X7 J+ L
& L; E( G( l( @3 g8 Y* l
导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。
# W  }# W6 w9 u 02.jpg
* t  p$ [) c8 L# H0 u1 @) i 03.jpg ) Z* i1 s. a5 g" S6 g* [6 ?

0 b# T/ s. F6 s' q0 }# }. w4 e' Z* T+ o  Z# e6 Y( ?2 H0 N
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。
  X, N, J0 h# Y2 |9 \# H1 N) e
* @7 y! }3 j$ YCortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。
2 B% m* E5 c9 X6 o(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)
8 c0 f# b' r" V; l* ~0 Z: X& S1 u. i, L! O
01.jpg " N5 V/ \% L8 D' T- b& J8 {( b7 g
6 f) Q7 M/ k# W- Y0 W2 m
下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。
% N" W6 V+ K4 U7 H. K; k" `, y8 D4 j
1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:+ Y0 d1 _/ r/ ?9 l# A
-------------------------------------------------------------------------------------------/ Z$ h9 l4 U0 a; C* e
LOG OFF, V& ?9 J! F+ w" H& {, ~" C. k
FUNC void Reset_Target(void)7 e6 z+ x1 N6 T8 i  d
{
3 h1 {/ n5 X: ]0 e' ^9 [ _WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command
; Y, T, R2 N6 R8 C7 q4 }  printf("\nApplication running ...\n");
+ H' j# [7 _0 S; ?% B( I0 F}
; f3 g) ^# y+ _, z! c  w. O6 wReset_Target();   //run) C1 s5 U: \" }/ l5 ^- Z" U( W- o
EXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令
+ y( w: p3 l" r& M" O---------------------------------------------------------------------------------------------
9 D" f4 P" t4 n/ ]" `
# ]- d# G  D- F3 ^  j3 t8 \6 T4 p2. 在KAIL的环境下,导入此脚本文件:
9 E! [$ ^5 a, ^1 Y% w' _ 04.jpg ' M$ j  K2 G" }. R. D# c

) K3 t) i/ @) M, u3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成* e% C8 Q" N- |! V. O$ o4 f
05.jpg * ~& \$ D* F! J6 r- i$ u) \3 K

. H8 V; @+ F* L) d5 ?4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。1 n$ y7 I' L" \2 w) h

$ a5 a* t' H% h% p# D6 x9 g希望有兴趣的朋友,找到更加简便的方法。" l" n/ F$ x3 w0 z- [! n
注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。8 O) W7 q/ q0 m7 ]6 X
其他情况下,各种不同的,仅供参考。
% E4 _) D' s+ m. B/ s0 y% i  L* A- a文中,软启动,复位,RESET,都是开始运行应用程序的同义词。 " G* u% |7 \' r. C0 L" A
硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。
& j1 R3 ~2 L5 K0 x9 n1 B& |( M) u$ \' B
收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:39
# V& i+ X+ ?: W0 c& N/ S; ], L目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。1 a3 W- N5 S  ?& @
6 d5 J0 S4 D8 l$ N
一楼的方法,可 ...

& R* ?2 r; j+ O# i+ @& C, C所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。
/ D3 a0 p) n0 G根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25, B0 C2 q6 ^/ V# g
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...
  \; U1 V5 L9 W; T
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器" x# T2 M( l2 C  z
解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:25' K  r! U  O, `; A3 j
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

0 a6 T  N3 \- k" U我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。& x; C9 T# R, D4 B- n
楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13) ^$ s: u; ^) x& }, {% o
mark。, w. [9 T& P# z* w
楼主研究得真细。

! O7 [/ G( F) d) s. f3 s; \3 n6 s这个问题就是您提出来的,我正在尝试解决。+ q# t! a* d9 [2 Y9 v3 H4 @3 n+ F

2 h! [; q" z9 X; `3 ?1 M2 W) [另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:; O& t- [$ [) F. C! O; x7 G
https://www.stmcu.org.cn/module/forum/thread-616215-1-1.html
* i6 E$ o! J; w# l4 b7 @/ z! t
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一样完成软起动了。
% A( M' [3 `' R. f  q4 u* b/ {0 ~
一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09
$ I$ a. _( @, O3 Q0 E! Ujlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
( F0 L# ~$ s  Q解决方法很简单,程序代码 ...
$ [# X& C! V. `( n* U1 \& B9 m& Z
这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:14
  Z0 P+ I/ C% ~( e1 a所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...
% p5 i& |( A( n* d% D# m
手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27
7 W6 B- _% r5 W5 ]9 ?这等于关闭WDT功能。

  z& p- U6 G/ I& S, v% \5 M8 R2 {2 ~没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

相似分享

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