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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑 , ^* |0 X, z$ P  h& X1 q

/ }: M9 G9 \* c7 f遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。
* g/ _) g! x+ g* {7 K1 {首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。
9 A. ^- ^# c8 z# G, U% L
1 m& S' Y- x- o% p  A) k导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。% L: Y1 c7 d" N) ~
02.jpg / L0 U. S/ x" V$ N! L
03.jpg
8 g6 f8 o  q5 a7 b9 `8 U- p% u" P8 Y, {" R6 ~0 i! u9 Z
9 K8 h- c2 B& F* V+ u
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。
- ~/ i0 X" [' u7 W3 @! Q& Y9 C9 @2 \7 U4 o: b" n
Cortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。$ Y* _' G* e; {7 K! H, p0 \' q; V
(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)
2 Y3 R8 T/ ?2 w) r$ C3 Z. T$ \
% Z* b" _% F% E% F; @ 01.jpg / S1 ]7 t  \2 b3 u$ n) ~

* Y' Q3 M' U" T! O% t下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。; n+ d$ `6 g, g$ Z, V5 z' [) p
( C' f& f6 K8 [4 L) R& O+ ]
1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:
8 D  n* t+ v' _; Y. g' W$ X9 ^-------------------------------------------------------------------------------------------
$ P/ W% ~& S4 G3 Z/ nLOG OFF
# b( H* M& L  l. \1 VFUNC void Reset_Target(void)" _: e1 x- @6 p9 k7 {' Q7 G, R6 ~
{
9 M" o% G- Y; c/ k _WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command& X' z6 _! t" Y3 M+ l
  printf("\nApplication running ...\n");
3 |, B9 p( T2 n; R( N: \8 e}% ^5 A( m+ t& d" A: Q  j
Reset_Target();   //run
) \+ {+ Q1 q; Q6 [3 |# oEXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令
9 x% d, u' i: M5 P% K" L---------------------------------------------------------------------------------------------
2 A9 R2 Y! C! n; O6 l! ?
/ ^3 {$ v8 u. Q. h2. 在KAIL的环境下,导入此脚本文件:- L* x2 i7 G* m- ~: C5 J
04.jpg
4 n) V( q/ k% t- }' i) s8 ]. t2 L$ N7 v
3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成( ^* H  A8 o1 r6 B* @+ D1 f
05.jpg 9 i8 ^; F; Z1 ^5 g2 ^. |, l9 b7 X

- ~( o7 g4 i2 i& F/ y4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
& H" A+ B# R! G  ]- q* i* D
. x  C( C+ l) H5 F3 l希望有兴趣的朋友,找到更加简便的方法。
$ V5 W0 _9 S% |( K& ^注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。
* U" y+ w% @5 Q! z. _2 P其他情况下,各种不同的,仅供参考。; r5 V* `8 C. g" W+ n. G
文中,软启动,复位,RESET,都是开始运行应用程序的同义词。
. r& A) L! o- i+ q! c硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。& L. K1 T2 A$ o: Z* _4 C& I
/ {$ }7 h# e0 Y+ I4 `2 {" `6 N& @
收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:39" P+ g. l1 O# l7 H, E
目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。
4 e" G( s; O8 q! M0 W3 W8 w) u1 J
一楼的方法,可 ...
$ q5 r5 j- i; ~
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。
5 e/ Q- q* M. M根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25
" d* H8 A+ r# Y7 n9 \2 E* {楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

! _, a+ |; p7 u9 N& J# \5 M1 hjlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
: b, }" M& G* _/ S/ j* y3 X7 H解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:25' Z" X- s6 e3 h+ Y6 x. ~& k
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...
# X' u1 @  s$ _
我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。/ j& z3 }% h* \" M; a7 f! }
楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13
* M9 u/ |1 g2 f1 i' I# mmark。5 @. a0 h1 `6 v; [, g
楼主研究得真细。

' ~6 g7 v1 y8 p, u1 |( l这个问题就是您提出来的,我正在尝试解决。
1 a! `' Y& [* ^6 e& d6 s! i! T- m9 L, S; h7 Z1 h* B. |( s
另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:
0 k* [+ D- F9 ~0 M; Mhttps://www.stmcu.org.cn/module/forum/thread-616215-1-1.html
. E  z6 q4 d/ ?3 }3 T5 L6 _0 r" k+ ~
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一样完成软起动了。
3 c/ d* n# [+ B- ~, P: u: `1 e7 H: o5 z
一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09
4 g$ @0 Z6 G$ |5 U9 z/ njlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器) d9 h5 n. s# j1 z- T9 t
解决方法很简单,程序代码 ...
0 {5 R8 {, D, k, [* \( _
这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:149 y0 U0 ]& t3 g9 W! C. W
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...
: s$ P9 M: O' ~" G
手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27
+ F# g, h& z* C" z$ N/ u8 q3 n这等于关闭WDT功能。

3 t: k, f8 g$ D! h( _& z没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

相似分享

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