你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
shanji 发表于 2018-7-4 19:16' P o5 q3 a6 S0 B1 _4 A( w 看来要换个mdk版本了
radio2radio 发表于 2018-7-17 17:20 ) }4 j4 C8 u, e0 E搞定没有?
huangxuejia-292 发表于 2018-7-24 09:352 R- [+ m4 J" @+ @2 f 楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。 i* H+ I0 q4 b1 u8 }) c5 h还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
9 A# P0 {! D) @/ z" [. `% }% e" s. ?5 X8 \//-----Soft reset + Hard reset-------------------------------------------------% U$ h& [# ~% f) R! E( x( ^ #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET ! Q& P( L: F1 V; b5 Y2 ?# f$ e1 h#define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR- d5 W' w, N: C( p7 F. f$ }4 Q. a 3 x) D! n$ e% A# G2 E9 `5 N #define RST_CLOCK_CYCLE() \ . Y7 a5 h L+ z" i0 R& C" J; O PIN_SWCLK_CLR(); \# H, c" y# ]. n) V2 U+ H K PIN_DELAY(); \ # I/ Y; g& C/ ] PIN_SWCLK_SET(); \" d; K" b' T, ?4 J PIN_DELAY() ; ~# U: s- G' g" U4 e4 M . }) I( h( h" ~: Y9 Q! l#define RST_WRITE_BIT(bit) \ 4 [# \1 G# Z4 X9 z PIN_SWDIO_OUT(bit); \ " |7 N; g$ L: K/ H: w" s PIN_SWCLK_CLR(); \ % _) ~* h a3 M/ C PIN_DELAY(); \4 o" u' h- a% C! E- J$ a PIN_SWCLK_SET(); \ . v9 c; F0 r! z* x7 f& Z N7 ? PIN_DELAY() 7 o3 H# q i6 ~0 z) Z7 s 4 q0 Y ?$ B& j/ e5 V- z* _#define RST_READ_BIT(bit) \) B, ~' p' `) h! [! z6 }7 U PIN_SWCLK_CLR(); \1 t: v5 k# p5 S1 t! z PIN_DELAY(); \$ V6 c+ D0 o( u' w+ i* H bit = PIN_SWDIO_IN(); \* t! _- t# L! T* ^8 @& x PIN_SWCLK_SET(); \ l% F! j3 K9 H PIN_DELAY()8 d/ b, s! `5 P; q, }( Q : d. `, t! ?$ l #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)5 m/ y; u/ d5 k* d* S2 r/ H; b! h r ( q' k8 \0 W1 v+ R/ w) puint8_t RST_Transfer(uint32_t request, uint32_t data) ; T" I5 c: j2 s{ 6 C* X. x% R4 C1 } uint32_t ack; \' g8 a" E5 d1 x3 t9 o, j uint32_t bit; \; N! d3 P% j" ~( i1 Y* _ uint32_t val; \) Q7 N; k* H. O4 B# [9 x uint32_t parity; \- K/ S/ a9 P" z: P5 O uint32_t n; \ 1 v5 Y* f2 ?) s& i \ % c) ~9 S" J+ W9 M/ N /* Packet Request */ \ / {5 t( V7 Y# w. Z5 m+ F parity = 0U; \0 L# d: G; n# z _1 v RST_WRITE_BIT(1U); /* Start Bit */ \; R' h9 [- p' s2 e% \2 x0 W bit = request >> 0; \7 P& { J* F7 h( P0 h4 n2 g Q RST_WRITE_BIT(bit); /* APnDP Bit */ \4 e2 x% V3 }) A" G7 B% W parity += bit; \; n' E! E/ N, E# Z% e bit = request >> 1; \ 8 u8 s, c1 B5 X) U, ^/ k3 V) u RST_WRITE_BIT(bit); /* RnW Bit */ \ 6 i, v4 j* O% ~ parity += bit; \) m; R$ l# o; z bit = request >> 2; \$ r( T: C" O+ z% Q( f RST_WRITE_BIT(bit); /* A2 Bit */ \. G& t7 r) p* R7 }, }! U parity += bit; \ 6 Y0 ]2 d; F9 K; ? bit = request >> 3; \ ^& R) ]' g. ~" ^+ j RST_WRITE_BIT(bit); /* A3 Bit */ \ ( O$ @: @( d) U) M; h0 q parity += bit; \7 D; S; g* h$ D2 {) g% ~8 n RST_WRITE_BIT(parity); /* Parity Bit */ \ 9 R+ d' Z) s0 W3 o RST_WRITE_BIT(0U); /* Stop Bit */ \4 W& B! F# s: X( m6 N+ d, J RST_WRITE_BIT(1U); /* Park Bit */ \! `- E$ p) M' M& I( Z \ 8 c& W/ y7 a' t1 n2 G /* Turnaround */ \ 7 L1 `$ A# x& `& e, A# p PIN_SWDIO_OUT_DISABLE(); \ : E; {9 t- }* n# |& v: B) G# Q& Q3 M for (n = DAP_Data.swd_conf.turnaround; n; n--) { \ 1 |) M3 m1 ^2 g5 R* X' R RST_CLOCK_CYCLE(); \: O M. s: }: ]# C/ f3 o+ G } \ ; D" a7 Q' E# ^9 b, z \ 1 {7 p# V9 Z) b- ] /* Acknowledge response */ \ 4 n" n" f( H% V8 v# { RST_READ_BIT(bit); \! o1 j( U" G& u1 N# _ ack = bit << 0; \) s' y3 H5 G+ J% {/ f. V! Z RST_READ_BIT(bit); \& X9 A/ B4 T! [+ Y/ t ack |= bit << 1; \ ) Q* g( c- k5 Q6 k. e: r RST_READ_BIT(bit); \6 T" K3 d+ ~! h/ p5 u. l ack |= bit << 2; \ 8 i/ ^" `, D" ^! o$ ^ \ / \& l) z& l: p9 f d /* Data transfer */ \ 3 _& n. ~+ f$ Z& E4 I$ y; U& u% X /* Turnaround */ \ 0 t s# |; `4 N9 S for (n = DAP_Data.swd_conf.turnaround; n; n--) { \4 p; B3 z) m$ w8 c8 J) q$ o. X2 v RST_CLOCK_CYCLE(); \ ! B0 @& z w; V7 n } \, Y, X1 W c ^9 n. r; c# J. [ G& M PIN_SWDIO_OUT_ENABLE(); \ 3 G- a, E# k$ G. f- C! T! ? /* Write data */ \4 A; K( g8 [- w) Q1 h val = data; \2 g% N, |' K3 C. A parity = 0U; \ - A r7 i, o0 Q8 ^4 E for (n = 32U; n; n--) { \ 7 Y0 t! L, s% d RST_WRITE_BIT(val); /* Write WDATA[0:31] */ \ " e2 N# `8 E2 B6 A9 ~2 L parity += val; \1 Y( }- O- `7 ~( j% x% n val >>= 1; \ ) }) Z: N3 |; b } \$ D7 o3 r9 ~& J RST_WRITE_BIT(parity); /* Write Parity Bit */ \6 _& T) d4 k5 _# m" |0 j2 d PIN_SWDIO_OUT_ENABLE(); \7 G: K* z& O0 I4 v% U5 E& m PIN_SWDIO_OUT(1U); \ * @! j4 B# c. \$ h/ W return ((uint8_t)ack); \ $ C5 D4 A" W( C1 Z/ V' e# q" B9 x}& t) W5 u6 R% W* u/ h 7 G& W+ w0 Y- M( E) Hvoid vResetTarget(uint8_t bit); }& ]4 ]* l1 p6 k% Z2 N {" }0 {4 L+ h/ _0 x( y7 r6 t uint32_t i; 8 u; B6 N8 ^: v1 x5 o: H4 } //soft-reset for Cortex-M, I( x; c9 N, e RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address, ~: L* B6 i0 x. t3 i! X for (i=0; i<100; i++);8 a7 N3 V( V. L" E RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data" U0 F% O/ d, y h for (i=0; i<100; i++);. w+ R6 D/ O" V6 ?) m7 c( @ RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat! Q9 A6 h2 {* R2 A1 _9 F a for (i=0; i<100; i++);8 o0 a! }' l( s: z2 @' x RST_Transfer(0x00000CDD, 0x05FA0007); 1 q8 C; E3 B0 u& a A& u" S % f. c. H2 x: N if (bit & 1) PIN_nRESET_HIGH();7 P. s, O2 s8 R. d6 E else PIN_nRESET_LOW(); . c8 c# E) P9 S, R} . p/ d% T# \% z" t$ w 7 n. Q% C6 U& ^1 g7 B, q. \3 w- F复制代码 * B! g; r# x2 V% w6 ?5 o- x4 E ( p7 w& a$ B- G9 r; t8 W0 W您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。 : d1 J# [7 R" v& T; S6 j! s " B7 m3 x4 o7 D; N. \, mCDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。% [2 R! h8 C! Y4 J, z ( [/ b2 n* k _; \; u% DUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。 - L( P$ k* l/ C: m0 b也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。8 _3 ~7 s! x' U! d+ \ 0 i2 g. c8 ^" x
radio2radio 发表于 2018-7-24 21:218 P) t) t8 l4 f7 J( A4 R) ] 这个简单,在main.c的最后面一段,我拷贝到这里:
huangxuejia-292 发表于 2018-7-25 15:004 r0 {2 \0 C; x& T) ` 改好了,调试能复位。 6 Q& Z# \7 w" AMSD(U盘拖放)无法复位。。。
radio2radio 发表于 2018-7-17 17:20; F2 R: y$ u. ^ 搞定没有?
radio2radio 发表于 2018-7-24 21:21 ( Q8 c/ F0 K/ r; W$ f这个简单,在main.c的最后面一段,我拷贝到这里:
g2004-148848 发表于 2018-8-7 00:03 Q7 f/ U4 o" s! a4 b8 g7 V请问楼主是用哪个版本编译的?
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 里面编译通过了。
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.
缺少的头文件 在MDK 5.xx 下面目录里.- y7 \ F/ E9 f, k8 Q5 c
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
4 n$ s4 J) }( w p$ H, F+ J7 d
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
这个简单,在main.c的最后面一段,我拷贝到这里:
改好了,调试能复位。2 f% a' [4 p5 R- W# z, f& x
MSD(U盘拖放)无法复位。。。
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。, H7 j2 x7 y% G" a
还没有,不去折腾了
看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。4 h' l/ O" K6 P$ c2 [
我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。6 m: T1 D7 l' B
哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。' K w5 U; E/ v+ j
方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
(我的github已经更新,使用方法2)! Q) n3 W3 i8 e0 D
4 j7 n% d- i. ]8 E
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。
, S$ ?( u6 G6 z) ]8 A f% W
1 N! Q5 C' N8 z2 x& ^0 S: Q1 c
USB_CM3.rar
2018-8-7 14:28 上传
点击文件名下载附件
63.75 KB, 下载次数: 48