你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
shanji 发表于 2018-7-4 19:160 R9 `/ P z. l- h0 U 看来要换个mdk版本了
radio2radio 发表于 2018-7-17 17:20 " R( S) @: b3 {搞定没有?
huangxuejia-292 发表于 2018-7-24 09:35 3 c. Q; ?" ~* |/ \ G' h0 X楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。* c. `; P( r: m! s* \ 还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
1 E; X' S7 J. e; V//-----Soft reset + Hard reset-------------------------------------------------; _ i6 u* |9 {( l+ S9 S0 {' D5 } #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET6 D, \2 ~( X+ L #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR ) T3 p2 ^% l; E6 X2 t* x 2 F" J( ?& j5 Y, m. i#define RST_CLOCK_CYCLE() \( ^3 D2 H6 ^, x7 }6 ^8 j PIN_SWCLK_CLR(); \ * f A* N1 M5 m6 `/ w3 h PIN_DELAY(); \1 ^) `+ h. i9 l PIN_SWCLK_SET(); \% {7 l6 \; H; q9 U# [( } PIN_DELAY() z: Z' a6 i0 t% Y * }& V4 r0 z& h- B" z$ H1 l3 O0 M #define RST_WRITE_BIT(bit) \ 0 b7 V8 Z+ s8 w' Z \0 H PIN_SWDIO_OUT(bit); \1 n! A) `: F* i4 N& _0 P6 J0 V PIN_SWCLK_CLR(); \ ) l6 _# c0 L" `; V f1 S PIN_DELAY(); \ 1 F' M [$ \) O! M# \ PIN_SWCLK_SET(); \9 D8 P/ e: E: L c- N PIN_DELAY() : L7 a4 {5 ~1 `$ x: \ n+ V $ J( g$ h& I# {8 f#define RST_READ_BIT(bit) \6 r) ?5 K3 k V3 o PIN_SWCLK_CLR(); \ - s2 Q( c1 l- C6 T PIN_DELAY(); \1 K1 L$ ]% p7 v( T bit = PIN_SWDIO_IN(); \ . {1 y& ~* ?) O PIN_SWCLK_SET(); \ 6 ~6 g/ S& O9 d1 s PIN_DELAY()! p2 K# y8 t {# i) |( O , r0 U' P8 _7 I. Z3 I #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay) 7 o3 a# }( g1 J' G$ y5 ]8 {0 d- b4 ?9 P- P3 f$ z uint8_t RST_Transfer(uint32_t request, uint32_t data) 5 w4 A( c f) o: X8 M4 l) S{ 9 T5 l4 v$ P* w# Y/ u4 i& W9 I- K uint32_t ack; \$ e8 B2 F3 W' u uint32_t bit; \ & V$ O& e4 }, `! k/ m uint32_t val; \ 7 b3 h8 B) c0 D! W- B m uint32_t parity; \7 ?7 V) ]9 i$ B4 { uint32_t n; \& n5 g0 m: {' T \$ i; X6 p$ |+ g2 N /* Packet Request */ \ ; z y5 C, g0 I. n) Z7 a3 v3 A parity = 0U; \ : f$ [1 s9 q. s$ ~ RST_WRITE_BIT(1U); /* Start Bit */ \! t# h' a+ N( Y+ Z3 v bit = request >> 0; \# r5 r W0 S+ r+ X RST_WRITE_BIT(bit); /* APnDP Bit */ \ + H1 @2 ~" x: L; b! S parity += bit; \: v% X. I. r8 l( y- @; _+ W# e bit = request >> 1; \ ( _" ]0 g% j5 U7 \; ] n RST_WRITE_BIT(bit); /* RnW Bit */ \ , l6 o* A- v, j! T/ d parity += bit; \- n5 F v% Z* H6 o! Z. o2 v bit = request >> 2; \( ^% s T& S" i" y z& T RST_WRITE_BIT(bit); /* A2 Bit */ \ 1 t& S% W0 z4 P* t. x parity += bit; \- Q9 T) Y2 Q4 L( P bit = request >> 3; \ 1 j0 t, w+ {8 L RST_WRITE_BIT(bit); /* A3 Bit */ \; a0 |( O3 _% U! r" e0 d parity += bit; \+ B' e0 b- K" Y RST_WRITE_BIT(parity); /* Parity Bit */ \ w& v( J5 `5 |9 V2 ?" F% v6 r" @" N RST_WRITE_BIT(0U); /* Stop Bit */ \6 \) D. J' R. g; Z* l5 @& a9 i RST_WRITE_BIT(1U); /* Park Bit */ \- z( C+ i3 N/ ^7 Y, k& J( H J7 N \- I+ s- H1 E g3 x /* Turnaround */ \ & |, ]' T4 \! a PIN_SWDIO_OUT_DISABLE(); \ 0 T" Q" Z; I6 D% W: [) b. W @ for (n = DAP_Data.swd_conf.turnaround; n; n--) { \ 8 e+ C$ ]/ b2 s; m6 A8 k3 ^ RST_CLOCK_CYCLE(); \ . D. I: `' @! R8 Z } \ 6 Z$ T e T0 t4 Y4 J/ Z! K \/ b8 e4 k/ T- x /* Acknowledge response */ \ ; y. w. [8 J" Z" ]" v RST_READ_BIT(bit); \3 F% |5 f" q: U9 l6 d% ` ack = bit << 0; \1 K) ]& M* M+ n8 \# V! l2 C RST_READ_BIT(bit); \ 4 J. i& H0 m w6 k- Y ack |= bit << 1; \ 1 a; X2 H# Z5 W: D) B9 X3 m RST_READ_BIT(bit); \- S. ]% ~* d" X: i1 t4 |- e ack |= bit << 2; \3 j$ F1 X7 X. L \: u7 ?" ^& p2 a& T t% f /* Data transfer */ \ 9 O. K9 W3 j) q# F$ Q8 t /* Turnaround */ \ " _" [7 l+ L' X for (n = DAP_Data.swd_conf.turnaround; n; n--) { \' D! A+ Y' p: c; f RST_CLOCK_CYCLE(); \ 3 Y0 p9 m1 r( w5 n6 G! ]& t3 D } \ 0 R" m! ~+ D2 ]* R z1 R; e' s' S PIN_SWDIO_OUT_ENABLE(); \, ~$ C' m- g) O$ _% x% V; v5 q /* Write data */ \# D( i5 ~. H$ s* I# u9 v val = data; \" i8 Q+ f7 c! S& M5 E parity = 0U; \+ T& s& b& c: N( {# k6 R9 r5 U' x for (n = 32U; n; n--) { \" y0 i" |5 L0 X: E' G* E RST_WRITE_BIT(val); /* Write WDATA[0:31] */ \ Y: [ X' G; X- N parity += val; \ 7 ~9 ], n$ [8 s' t/ ? val >>= 1; \ , W Y C, D2 q3 X( Q* }, p, R } \; S: k# i$ a% ~* ?$ a- N" z RST_WRITE_BIT(parity); /* Write Parity Bit */ \ + l7 n$ X4 Z7 u) `+ U, k% ~8 N PIN_SWDIO_OUT_ENABLE(); \ 7 I a( t, B: i3 n# U5 i PIN_SWDIO_OUT(1U); \ ! E! }5 J) k) L2 V8 E. x9 D5 o% w+ v return ((uint8_t)ack); \' x: W" y J. v' [ } . U4 T) w$ w7 ~. w8 O4 @ & }9 K0 H( A7 J5 dvoid vResetTarget(uint8_t bit): d) `1 k6 r* v; q" T. @ { 7 a: v$ O$ @1 t3 L9 X; L" @$ U. A1 Z uint32_t i; 1 g2 T1 s0 K! ] |6 F //soft-reset for Cortex-M: Y' q, |% E _2 x# M RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address# O. p0 C+ p! E, T; a for (i=0; i<100; i++); ' {( d6 n' y& B1 N/ O9 K RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data $ W/ c, A9 a: q for (i=0; i<100; i++);. J, N2 q7 C4 F5 ^ RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat5 O5 w/ Y7 E9 H z9 D% b" Y for (i=0; i<100; i++); # m8 q, S+ a8 j7 x V. a RST_Transfer(0x00000CDD, 0x05FA0007);$ p. }5 k1 g$ p) f0 A 2 p. V5 g+ ? K- \ if (bit & 1) PIN_nRESET_HIGH(); * w% u" U/ N1 y1 q7 Q2 K0 f else PIN_nRESET_LOW(); 3 K$ A3 H5 \1 a# w( G) C( O} ) n6 P5 X) v4 V+ q1 `- F/ ]" G: j% d & a: |; W3 o. v6 O3 S- d, c+ o% e3 y复制代码# \: q, X$ k/ Q8 ~% J! S $ M M2 W% c* d" G4 W5 n+ i 您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。 ( e: c3 \8 Q$ Y0 V U: D5 U4 h5 `: U8 u* ?0 h6 X! YCDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。- q; P3 [, B: P3 N$ _. S( Z4 \ 8 i2 c3 e, r5 G. A( N ^* e1 CUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。* r5 a6 L! _ j) R' R3 \5 L0 I& W 也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。7 y( z$ a! p* q9 S, j " u" {$ u6 G7 \+ P% K" w
radio2radio 发表于 2018-7-24 21:21 6 i( S8 r1 q0 h: q: D, p/ }这个简单,在main.c的最后面一段,我拷贝到这里:
huangxuejia-292 发表于 2018-7-25 15:003 [& j" {0 U" ?7 P" i 改好了,调试能复位。, p* h2 Z6 z/ p& e H MSD(U盘拖放)无法复位。。。
radio2radio 发表于 2018-7-17 17:20 0 L: k% k/ n/ u6 z搞定没有?
radio2radio 发表于 2018-7-24 21:21 * [/ U! E4 B( K+ b4 A这个简单,在main.c的最后面一段,我拷贝到这里:
g2004-148848 发表于 2018-8-7 00:03! \* {; D* H- l) M( j 请问楼主是用哪个版本编译的?
USB_CM3.rar
2018-8-7 14:28 上传
点击文件名下载附件
63.75 KB, 下载次数: 48
小马哥STM32F103开源小四轴RoboFly全部资料大放送
【MCU实战经验】+STM32F103的uCOSII详细移植
STM32中BOOT的作用
STM32如何分配原理图IO
STM32的I2S外设
STM32电路知识学习
基于STM32F1的CAN通信之DMA
STM32怎么选型
简单分析STM32和51的区别
简单聊聊STM32的SPI外设
搞定没有?
在 MDK 4.xx 里面编译通过了。 5 |7 O; o0 r4 d6 Z
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.1 b* l3 k2 o$ Z
缺少的头文件 在MDK 5.xx 下面目录里.
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
) Y5 R* a7 p+ Q6 W4 E
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
这个简单,在main.c的最后面一段,我拷贝到这里:' D' Y- b8 A" |. {8 ~3 e# E
改好了,调试能复位。
MSD(U盘拖放)无法复位。。。
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
还没有,不去折腾了
看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。
我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
(我的github已经更新,使用方法2)0 h7 o; I, P0 ?( o0 `8 B5 O
0 V! ~, [ v! m# T& }
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。
+ |/ a* G7 R1 Q8 m3 J5 W* }. Z
USB_CM3.rar
2018-8-7 14:28 上传
点击文件名下载附件
63.75 KB, 下载次数: 48