你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
shanji 发表于 2018-7-4 19:16. C: M1 _5 q$ o8 l7 ?# w5 } 看来要换个mdk版本了
radio2radio 发表于 2018-7-17 17:20, I0 @; w" }1 z 搞定没有?
huangxuejia-292 发表于 2018-7-24 09:35 8 g0 Z) a7 M2 t5 \1 D) s( D楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。 " V ?5 O: F& x( Z8 Y' X还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
' ]; b) z Z% g c& X1 k8 \" c* i, Q//-----Soft reset + Hard reset------------------------------------------------- 9 G; v5 r1 W2 |! ?' x#define PIN_SWCLK_SET PIN_SWCLK_TCK_SET 3 t d1 x" `7 n d#define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR5 ] d& ^, q- V- @. o7 `6 a . B) P, \4 I8 F/ [" u6 d#define RST_CLOCK_CYCLE() \( K( V" _/ j. c" W. I PIN_SWCLK_CLR(); \ 2 O9 G* M: }8 i: V" `9 M PIN_DELAY(); \. |- ]' T! C; n* _6 | PIN_SWCLK_SET(); \+ O) a( i g* d2 h PIN_DELAY()/ V2 j0 D N$ u* a5 J - t' S; {2 ~8 G m' U#define RST_WRITE_BIT(bit) \ 8 U' Y Q; u9 s3 p9 w. L0 ` PIN_SWDIO_OUT(bit); \. {9 n7 x1 }& F- I% F l" l6 d PIN_SWCLK_CLR(); \8 Y2 U h K8 n V/ k, o PIN_DELAY(); \* o0 G g+ n- p1 }! s& ] PIN_SWCLK_SET(); \ ' ^3 O% ~( f% c1 T* c; v PIN_DELAY()1 ]6 r2 v) r) w5 @$ S' l: V0 c6 G; i 9 r4 Z! t/ s1 e/ \ h#define RST_READ_BIT(bit) \4 d. P' A% ~% x7 N, x% ~ PIN_SWCLK_CLR(); \ " _* A7 U. O6 n% q \- U PIN_DELAY(); \ 0 Y" h% \2 X$ q7 B bit = PIN_SWDIO_IN(); \ * \7 `) [, l2 ^. Y+ y2 C! J' A PIN_SWCLK_SET(); \9 L% w+ s4 Y- o. J PIN_DELAY() # }) z3 S" h l) M" [* C1 m. \- h6 i) Q) h& J #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay) " U: }7 D/ o0 k - y2 ?9 I' X) e# l5 \+ Suint8_t RST_Transfer(uint32_t request, uint32_t data)3 |* x4 M5 n5 F/ [3 O8 P" P/ ? {: Y$ o+ l( _1 @% Y+ i' T uint32_t ack; \; I! C& F4 ?9 f/ E1 C+ s uint32_t bit; \. k C1 O" e* \. {" n, G2 s uint32_t val; \ / \+ x n _, ]$ j uint32_t parity; \$ d, G1 H4 z4 M' Q: o5 h uint32_t n; \9 e6 @4 I. Y# Z. M7 t \, }4 d* s& Z# r /* Packet Request */ \* G" v$ m0 z0 b; s4 H/ B parity = 0U; \5 S/ D8 [( `4 ?. m, k5 y, G0 z RST_WRITE_BIT(1U); /* Start Bit */ \ ) L/ K2 O/ K& h3 n2 }! G bit = request >> 0; \3 A1 E& v+ y6 Q4 b: S% t8 U RST_WRITE_BIT(bit); /* APnDP Bit */ \4 l5 `3 @; Y0 z* R" ]. C9 e parity += bit; \ 1 j7 q! C2 o- q w bit = request >> 1; \ 3 n6 G0 F1 O7 Q& f RST_WRITE_BIT(bit); /* RnW Bit */ \) C$ x- W% \5 ^# l parity += bit; \ 3 [" Y& q6 o% r2 d- _. f bit = request >> 2; \ & x8 f1 F; s% i RST_WRITE_BIT(bit); /* A2 Bit */ \ 5 l/ {4 w3 B# c+ O1 J parity += bit; \ 4 ?: B& {2 M1 c) n" @6 ? bit = request >> 3; \ % P' V# @6 |& M8 Y4 x RST_WRITE_BIT(bit); /* A3 Bit */ \ 9 E% W: V/ U0 j0 u parity += bit; \8 y- U) e' X* {# w RST_WRITE_BIT(parity); /* Parity Bit */ \ 6 R( n" S2 |- M" I$ d0 @ RST_WRITE_BIT(0U); /* Stop Bit */ \% r+ a% Y. p* I RST_WRITE_BIT(1U); /* Park Bit */ \ 7 R" x/ Q+ P# a \ , [; u4 R) u& ? /* Turnaround */ \ 1 O6 L! H/ V& X PIN_SWDIO_OUT_DISABLE(); \/ [) ]2 H T9 h, y: j, x for (n = DAP_Data.swd_conf.turnaround; n; n--) { \ & o3 F% N1 j" L- b' l- i" [ RST_CLOCK_CYCLE(); \ 9 x- u6 |7 j+ e; A w1 z4 m# z } \# C7 Z. m, c* s' ` \ & b8 M# L: c. |. W0 r3 y /* Acknowledge response */ \! n7 R1 ^1 F5 E0 g9 |+ Q RST_READ_BIT(bit); \ ! Q6 T7 W) C5 s ack = bit << 0; \ % d3 K" W* z8 Z2 k RST_READ_BIT(bit); \ 6 |+ G5 z' Y }. w T, J3 d) m ack |= bit << 1; \ 5 \* h; z; n" W RST_READ_BIT(bit); \ - y+ l$ C C- K+ X8 r ack |= bit << 2; \ 5 H9 i- a1 F* R( T. O \1 I, d: x0 Y( g+ b4 a* F2 ]+ T /* Data transfer */ \7 @5 o0 r7 r. ~3 g /* Turnaround */ \ 7 j- \. H4 b9 V& ^2 | for (n = DAP_Data.swd_conf.turnaround; n; n--) { \# {6 l, F9 f, S( l( I6 \6 p( w' } RST_CLOCK_CYCLE(); \- q1 @ Y& S: M8 c/ L q d% e } \; e9 q' H, J# b8 g& u7 U PIN_SWDIO_OUT_ENABLE(); \5 c" n* N) P/ q' o5 A: J /* Write data */ \ & B+ P' o7 R' a H6 X; q; G0 B' l% m val = data; \ / X# W; J Q3 v9 z, l4 r' B2 ? parity = 0U; \2 w1 o! }% F: `. D for (n = 32U; n; n--) { \ 0 C: i9 n& N& F h RST_WRITE_BIT(val); /* Write WDATA[0:31] */ \# H1 {" O0 Q4 d; L5 q( n$ v parity += val; \4 V" U( P- S! o# M# s$ }$ l; x val >>= 1; \+ O( A5 ^) z) q c$ V! U# S" R } \ 7 `: ?, P( a# T8 R0 a3 R RST_WRITE_BIT(parity); /* Write Parity Bit */ \. G5 Z# }' f. m! q, g PIN_SWDIO_OUT_ENABLE(); \ : X4 K0 l8 G% R6 M/ S8 m- v PIN_SWDIO_OUT(1U); \( G8 U% J& I- @6 ] return ((uint8_t)ack); \) @+ \% h: r2 \ }, a; {2 m! f& r! s ( Q7 s: V' c- ^4 z! J+ h: Bvoid vResetTarget(uint8_t bit) - v7 N( h: O1 k& I) r8 N4 S; W{ % h7 Q( k% B O2 j5 q: H% @- S uint32_t i; 0 ^; U) X( l/ V u9 u% n //soft-reset for Cortex-M ' f% v) r$ A- b: I RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address # F2 {$ [2 j/ ]# f& E; B S for (i=0; i<100; i++); ( x& W5 e5 A; S3 t+ a% z RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data/ T; P# @, t6 L for (i=0; i<100; i++);. N ~0 v- N1 b% `" z RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat% I+ P; N n" u% i% a, e) k0 J for (i=0; i<100; i++);, f9 R* [5 Q2 d" V7 d RST_Transfer(0x00000CDD, 0x05FA0007);6 H; @6 i; l& g$ B : A" g" {: e" S5 Z: C7 i0 j if (bit & 1) PIN_nRESET_HIGH();" I7 j6 w& K$ ?) F- m; E7 l else PIN_nRESET_LOW();1 m$ p, X7 A1 I: |) d, \/ u' K }) s _: A& B: V) k0 V+ R4 |3 j % u7 @# I, Z/ [复制代码/ }1 x, |) g4 i; g. u: W , ?6 n- B# R) Y0 h" I6 ] 您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。 + N" _+ d/ O! t0 @0 d$ j( A# `9 _. C. y& R) O CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。/ P' |$ {5 h% B# @ Q: R3 ]+ u% ?8 h$ v+ h7 kUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。; |2 p& i8 c# ?5 A3 X4 d# s 也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。% C' R# g B2 }5 n) L$ B1 f5 V$ ` 5 K2 q) D! J* ~) Y! o$ X+ c
radio2radio 发表于 2018-7-24 21:21- _/ E9 b( z8 d) O 这个简单,在main.c的最后面一段,我拷贝到这里:
huangxuejia-292 发表于 2018-7-25 15:00 " ]. J! l! P- m" c+ P/ Q改好了,调试能复位。! U4 l6 R3 h. n( z* J( X7 H x MSD(U盘拖放)无法复位。。。
radio2radio 发表于 2018-7-17 17:20+ e9 ]. b) B* P; R% ` 搞定没有?
radio2radio 发表于 2018-7-24 21:21/ ?7 ?* X& R: x- @( t 这个简单,在main.c的最后面一段,我拷贝到这里:
g2004-148848 发表于 2018-8-7 00:03 1 J/ B0 Q) o6 p% h3 x请问楼主是用哪个版本编译的?
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 设置就可." v z5 [2 [- c" d* j$ Y8 E1 L# L
) A9 G! e9 ~0 K
缺少的头文件 在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\Include4 S" d$ U! |) a y9 P
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
这个简单,在main.c的最后面一段,我拷贝到这里:
改好了,调试能复位。
MSD(U盘拖放)无法复位。。。
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
还没有,不去折腾了
看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
# X) W6 O( ]9 l2 l
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。5 [* _! R( e2 z* w: m
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。2 {5 h3 w/ {- j" R1 F! d& C
我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
! _5 P5 u' p l) E" P5 F m7 e
没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。6 U9 Z2 j: y$ j5 h, x. v# e- Q( P
方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
(我的github已经更新,使用方法2)
`/ h$ v9 h1 M6 N
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。& m& z Q9 T& `3 r }* k1 l
USB_CM3.rar
2018-8-7 14:28 上传
点击文件名下载附件
63.75 KB, 下载次数: 48