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

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

[复制链接]
radio2radio 发布时间:2018-6-10 11:36
本帖最后由 radio2radio 于 2018-6-10 11:54 编辑
! I$ @( T1 W6 H4 o# G4 o7 F+ h
( m& W9 Y3 M6 [5 {* Z遇到过这个问题的朋友,知道我说的是什么。多数情况是目标板没有RESET线,或不方便多引出一条线。
, ?" Y" N. Y. {& D1 Z% `首先,也可以这样解决: 1. 换用J-LINK仿真器,它不用RESET连线,也可以下载后程序自动运行。2. 进入Debug模式,按Run按钮,开始运行程序。3. 编写一个批处理程序,调用外部的Flash Programmer下载程序+软启动程序。7 S+ D' A1 ]8 s' R+ w1 X
9 C) t: b, d4 _* b0 N
导致不能实现软启动的原因,是因为KEIL里面的SYSRESETREQ功能在使用CMSIS-DAP时不起作用,没有发出相应的软启动的命令。0 `% @! x6 p- \& L5 I2 H9 \
02.jpg " `" f- k/ K" B% f
03.jpg
7 Z1 G$ x% x/ Y/ o7 r, z& e) S* A8 n( q1 C- r' R% @
4 L7 G" W7 x0 r7 a+ n* y
MCU软启动的原理,是向某个地址位写入特定的数据(此为后门),内部的逻辑就会给出等同于外部复位启动的动作。 系统时钟正常工作,是软启动(复位)成功的必要条件,这也就是MCU应用中软启动不能完全替代硬启动的原因。: }( S4 C; b0 G+ O5 F
3 a  p( {6 t3 b' e( f: w5 E
Cortex-M系列MCU的软启动,就是向AIRCR地址0xE000ED0C写入数据0x05FA0007。# Y% z, x+ P9 s' q# h& l+ m" F" n
(人生,如果有这样一个“奇葩后门”,太多的大小问题都不会是问题了。)# {) t& [1 I/ X, L! g( p) T, c- ?

. m$ x$ K* c! k: L. r. U. F; Q0 d 01.jpg
  `+ e+ @/ A* K2 _  R0 b# P  ^0 j4 \( _% A$ n2 Q
下面我给出一个KAIL解决CMSIS-DAP仿真器软启动CortexMCU的办法。
8 x: @3 B9 p# S; l# v: l  C+ g2 H- Z
# E# m+ ^7 b6 M) ~; _) w1. 编写一个KEIL的Debug模式的脚本文件,文件名随意,比如ResetTargetBoard.ini,内容如下:
" o% s0 W9 |6 q: W0 D+ s-------------------------------------------------------------------------------------------9 v. ~6 u. C" I& M
LOG OFF
; g+ A& G& @0 m; {1 ]FUNC void Reset_Target(void)
; q! p; j% c' `% s {8 a9 N2 [4 F2 ~! _
_WWORD(0xE000ED0C, 0x05FA0007);      //Reset Command3 x; w  Q* R/ W
  printf("\nApplication running ...\n");
/ N, T- ^$ _9 @9 ~/ s( s}
2 [/ {. a5 l# G" e; x( r6 C4 wReset_Target();   //run* O4 F- n" b0 g1 C
EXIT       //exit Debug mode,如果需要留在Debug模式,删除这个EXIT指令- D! r( u7 ?9 ]: V4 ]; S
---------------------------------------------------------------------------------------------
  k- j/ s) T+ Z4 u
1 C9 O" F/ `) r9 L+ u, t, e; j3 }2. 在KAIL的环境下,导入此脚本文件:8 L1 k( `3 O5 J) A) x$ K% B$ I
04.jpg
* W1 t2 C% p0 A, t; w4 R! F$ v& e+ Y- _; F& V& S9 B6 [
3. 在KAIL下载了用户程序以后,按一下Debug按钮,软启动就会自动完成。: q) ]2 ?' J* d$ A- Z0 c
05.jpg
' n; D6 R, K1 C& w- k# A
6 b' `. T) r$ Y9 F) K9 C/ _; X. T4. 如果需要软启动后,留在Debug模式,删除最后面的EXIT。
3 g# ]* w# F6 [: x" ~( F
* `7 R8 ~  L" L希望有兴趣的朋友,找到更加简便的方法。
0 ^9 M9 {0 P& V5 A注意,此文的环境是针对Cortex-M MCU,CMSIS-DAP仿真器,KEIL系统,不使用RESET连接线。: d! K4 K7 P$ k: X: Q% b
其他情况下,各种不同的,仅供参考。1 ?! m4 C6 e! t- ^0 `3 R
文中,软启动,复位,RESET,都是开始运行应用程序的同义词。 : s2 {3 `7 D  ~7 [
硬启动,是指仿真器和开发板之间,连接上RESET连线,使用CMSIS-DAP仿真器连上RESET线,就没有上述问题了。
5 r3 g# I3 O( D- D" r, Z( H. _" U/ P9 Z7 z; @
赞 收藏 2 评论16 发布时间:2018-6-10 11:36

举报

16个回答
拜仁主将 回答时间:2020-6-3 10:14:26
radio2radio 发表于 2019-7-25 11:39
& I3 l7 q4 }) w; A( @1 g4 \! p! s目前,许多新版的CMSIS-DAP仿真器,固件已经改进,可以像J-Link/STLINK一样完成软起动了。. s+ a0 H9 s: b+ a) i
* s* P$ G8 U: h5 {# E
一楼的方法,可 ...

" X! T: ^& J+ V/ c所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位pin的操作强制改为了你上面提到的写寄存器E000ED0C的操作。
4 w+ D( x0 O  Q9 D根本问题没解决,就是keil始终没有通过不同的复位选项主动去发不同的复位命令操作
拜仁主将 回答时间:2020-6-3 10:09:37
vitasnokia 发表于 2018-6-29 17:25
( M+ o2 y% ^+ D$ A' x- X, w; b4 g楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

% r, i$ }1 h0 P" X! K* wjlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器; x  S5 F' }  Q" W$ a* ]) G" T
解决方法很简单,程序代码初始化时打开DBG寄存器的看门狗使能位就行了
radio2radio 回答时间:2018-6-29 19:53:12
vitasnokia 发表于 2018-6-29 17:252 Y+ q5 a0 o! n' d  Q1 K* e
楼主,请问一下,用jlink仿真的时候,即使代码里面有看门狗,单步执行时,也不会因为没有喂狗而引起看门狗 ...

* }4 i% v$ f; F( e! L( |) Y4 j/ c我没有这方面的经验,如果我遇到,我会暂时关闭WDT,毕竟WDT只是系统出现严重问题时重启系统的,不影响正常的程序运行。
wujique 回答时间:2018-6-10 17:13:15
mark。
! j" h- O: C( {2 S楼主研究得真细。
andey 回答时间:2018-6-11 09:07:19
提示: 作者被禁止或删除 内容自动屏蔽
radio2radio 回答时间:2018-6-11 19:48:39
huangxuejia-292 发表于 2018-6-10 17:13
1 I; _. W- [9 f9 T5 s* `mark。, e( q8 m8 K" ?, }9 \) P
楼主研究得真细。
' O! }; o2 t- C; D& H
这个问题就是您提出来的,我正在尝试解决。
# u' D" a0 l( B2 }) @/ H5 r6 s* K; T& e! k; x
另外,我发的ST-LINK的固件,与您的板子的GPIO定义一样,您可以试一试:/ D( h- ~# a( v. x$ ^
https://www.stmcu.org.cn/module/forum/thread-616215-1-1.html
9 [# m4 y* L" P; ?1 ]9 Z0 x
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$ X4 K# B) B  t& D

6 _! X5 Y% G" Q8 g5 W. x一楼的方法,可以用于老式的没有软起动功能的CMSIS-DAP仿真器。
radio2radio 回答时间:2020-6-3 11:27:21
拜仁主将 发表于 2020-6-3 10:09) d0 n! x3 x( J: \+ d( Y
jlink是因为仿真时默认把DBG寄存器中的看门狗位使能,而DAP不会去操作该寄存器
9 L. @: q( |6 \; V! t解决方法很简单,程序代码 ...

. q: p% h9 N4 ~这等于关闭WDT功能。
radio2radio 回答时间:2020-6-3 11:29:13
拜仁主将 发表于 2020-6-3 10:141 L- v1 u, X  D  W% w
所谓的新版的DAP,只是DAP接收到keil发出的DAP_SWJ_PINS命令去操作reset pin时,在固件中将置高置低复位p ...

" I' T7 g8 T3 W3 S: }9 P手段不重要,目的达到就好。
拜仁主将 回答时间:2020-6-3 16:44:03
radio2radio 发表于 2020-6-3 11:27
/ G9 e! h2 N2 j2 o+ L/ ~这等于关闭WDT功能。
6 r( z1 M* E1 k$ h1 Z6 c
没有关只是在仿真单步调试时停止WDT,全速运行时还是会使能,跟Jlink的做法一样,只不过jlink是通过SWD接口去操作dbg寄存器,用dap的话就需要自己代码去操作或者直接在寄存器窗口操作
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版