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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑
) m; r+ v: W/ @) Q; o9 G/ Q( T& h, I  p# ]
遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。
# C: U9 ^0 U  G# X/ q  j首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。! Z- ^3 g2 K& R+ X$ a& h: c

' e5 g- e9 [) s, w% |, t导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。) h( R* s- g9 @( c
02.jpg
0 _+ `$ H. ~+ d; _2 W6 Y. v 03.jpg
, l6 s, R) ?& A( p( n& d5 ^; u' x! z" D- O) k: A
( |# O# S" y5 v2 c" k
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。, y- v# A- C& J" P" L7 O* C# [; c

" ]* c1 |+ j2 W2 n; VCortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。# j. d# I1 e2 t$ z. f8 q& T
(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)
: E' B5 k. K% \. Y5 w5 ~0 a' y* Q; e: s# H6 u3 G2 x# q6 [: O  X
01.jpg
+ f/ N4 V1 S: N" _
* ]$ {- p$ }$ u" b下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。
0 ^. g+ A9 f# E- n# y
/ M$ b- n8 n/ N* p" G/ j2 `1 _1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:
8 y* k/ y! R3 A/ K- {-------------------------------------------------------------------------------------------
8 N+ d8 W% P2 ?LOG OFF
. c% W& t! Z# lFUNC void Reset_Target(void)" \" P( z& j- I! w& N
{: J% w' S  i& f/ }
_WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command
( v2 x* F, n9 v( u) v$ M  printf("\nApplication running ...\n");
9 B* a* P% N% ]* e' U6 a% W% K}
/ D, y3 a# _7 O; WReset_Target();   //run9 ^$ A% S6 P4 s% T% f7 o( c
EXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令
5 F" S: f* _- s( t0 M) q---------------------------------------------------------------------------------------------
1 [, U) Q2 W9 b3 B, V. M: Y5 M6 N/ \- M7 B5 J
2. 在KAIL的环境下,导入此脚本文件:
6 ]* f$ s3 r& x0 u' x( x 04.jpg 6 c  L8 z+ t5 w

) K2 i+ I3 l2 m" {7 d, O8 L3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成
8 l' p/ e! a* Z$ } 05.jpg 6 h( t2 V" Q/ N

! r" h. f2 ^$ {# `6 }4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
- L( N/ U8 `1 G4 ]
: R  u4 Z) Q- R. H) z& D" W2 \希望有兴趣的朋友,找到更加简便的方法。
9 d* z6 U4 u* c( B; p: t# ^注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。
: p) e% Q" D7 [其他情况下,各种不同的,仅供参考。
& G2 k, ^5 F* I+ S* [文中,软启动,复位,RESET,都是开始运行应用程序的同义词。
& a" I8 J- x+ K8 z3 ~- H硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。
5 x) R3 N( n! ?* ?! z3 J
# O& U- H7 z$ V
收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:39
( W0 ]+ D% q6 ~3 I目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。& l+ R5 R. C" d& X' B
7 j/ Q6 e/ A  o3 ^8 B4 j% R3 ]) ?3 D
一楼的方法,可 ...
/ |, W  S6 d$ |! c" {$ x
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。% \* I1 k4 p) A; o" C) e
根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25$ a: t: O/ ^; P; A  p+ ^, N+ t; p
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...
" D3 g7 q0 {% a2 V
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
. V& ]6 w( w' g7 T; W% m$ n7 d解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:25' R3 k+ u4 p5 I1 Z! [% E+ `4 n
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

3 b3 A+ w, D9 R" ?6 e1 V我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。
5 V1 f8 D* I$ R7 v: s楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13
+ c0 c  z6 u) g" K, |% t" F0 N* Tmark。
1 ]$ J8 z( e4 e' o楼主研究得真细。

3 h, b1 P- I" x$ Z; f. l这个问题就是您提出来的,我正在尝试解决。/ D. O$ ?$ z' ^+ h

! Q1 Y, B8 P  v5 j9 W另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:
3 R5 s$ U7 I2 z% u, ahttps://www.stmcu.org.cn/module/forum/thread-616215-1-1.html  F6 T9 X+ E/ S  P8 Z
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一样完成软起动了。- H; r: v0 Z3 H4 u; j7 u6 E

' W' A, F1 K, F. V. m一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09
; s3 I0 I2 X: ]jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
9 Z$ j9 }$ E' Y# O' S; B3 w解决方法很简单,程序代码 ...

1 X; L* }3 f. x$ Z* C$ h这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:148 _  l) q  s5 E5 P! q9 N
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...

) L  K, D3 x& }) Q手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27; I/ ?6 n+ @  x% Y9 F) N# t+ [
这等于关闭WDT功能。

; a8 x2 j2 p3 h没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

相似分享

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