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

【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

[复制链接]
mon51 发布时间:2014-3-31 18:51
STM32F207的HOST usb 非常有用,可以接U盘,也可以接USB接口的键盘。非常方便,但ST的U库V2.0,V2.1实际使用都有问题。( j' ]/ f% h* I" [$ q; B
经过修改,现在可以很好第读写U盘和连接HID键盘。
# j2 k6 O6 a4 T+ C0 L8 L程序代码的核心是V2.1的库。6 n3 O5 R) a$ C
通过U盘D读写,可以方便地进行IAP-BOOT操作。以及用户键盘操作!# ^& k9 A8 e$ ?! ^$ j  t
收藏 2 评论23 发布时间:2014-3-31 18:51

举报

23个回答
wn1900 回答时间:2015-6-1 10:44:41
这样看着很不方便,楼主可以打包,简单说明一下就好了,赞一个,辛苦了,楼主
小伟哥-353357 回答时间:2015-3-17 17:37:06
FS模式下 USBH_MSC_Read10读卡死是什么原因楼主能指点一下嘛??
mrzhanghw 回答时间:2016-4-11 14:02:09
能把程序打包发给我么?78725580@qq.com,谢谢楼主
mon51 回答时间:2014-3-31 18:52:44

RE:STM32F207的host USB的MSC和HID的合并开发

吃完饭来发电路和源程序。
mon51 回答时间:2014-4-1 10:51:07

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

继续发图:  P3 J2 P, F! t" e0 ]4 ^
电路很简单,占用F207的HS-usb:
mon51 回答时间:2014-4-1 10:53:18

回复:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

回复第 3 楼 于2014-04-01 10:51:07发表:, f0 N  K( A5 b' D
继续发图:
+ \; u; W2 e. W" w电路很简单,占用F207的HS-usb:
; B6 m0 z3 D) N- f 
2 Z1 p4 m; \. ?( E# J* Z4 w( ?3 e1 w. V
 
USB.png
mon51 回答时间:2014-4-1 10:55:01

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

初始化端口程序:
9 r9 |  ?2 N" V6 Q) B# ~) n4 D9 Evoid USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev){) K$ I. i$ J5 C# t0 t) i3 R5 Y  A
  GPIO_InitTypeDef GPIO_InitStructure;
: R0 |* n) ~/ Q  l: G5 [, _& j  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);( }4 D8 A! Q  u& A
  ' O0 U/ M0 ^" \0 c
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12  |
) |5 \) E" u2 ~" j( f8 V    GPIO_Pin_13 |$ m" M" L- k' K) v
      GPIO_Pin_14 |
! P: ^" J4 e: z9 @7 [8 ]9 Y% A        GPIO_Pin_15;" a6 K0 q( F! W* ~3 ]0 F% _
  
- d& D8 P% w  ]: c7 `; ?1 R  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;2 M: `& T2 \/ {1 J# x- @% @
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;4 I* d- e  X0 H8 P" P
  GPIO_Init(GPIOB, &GPIO_InitStructure);  ; j( T5 k9 Z8 d- s
  
$ r  ^5 |1 R$ S- d* I4 h2 t  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_OTG2_FS) ; , z6 m& D& g* y2 V: @/ Z/ ^& m
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_FS) ; ( o2 v  E2 u( A0 O( B3 `
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG2_FS) ;
$ O; }  h( T4 \, k; i  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG2_FS) ;& z) w0 t7 _* n
        //---------------------------------------------------------------% X/ X% @& \0 m; K2 z7 a; Q
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ;
1 H- H# w2 x8 H  t$ j( F        //-----------------------------------------------------------------9 G) P) O  A7 H
        //Vbus_EN   根据实际电路修改!" v6 @% g8 B* l
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE , ENABLE) ;  5 C3 l0 z9 z! j, A- Z
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
% k: |) u5 d' m& X& [" U) x7 R        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;( R! b+ A! m5 ^/ _, ^9 B
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
3 H; c  r1 I! k. w" u  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;  * e* A4 j! f: a4 U- E9 ?$ ~' y
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
6 [/ s7 i  p7 ^0 N9 s+ F0 n7 n  GPIO_Init(GPIOE, &GPIO_InitStructure);
3 S8 x5 Q' s) ?# }& s: |         
2 C% U+ c1 G4 v# m8 k        GPIO_ResetBits(GPIOE, GPIO_Pin_0);
, G0 B: J( K: N7 E5 i" T# \        //-------------------------------------------------------------------* @4 B0 u- j8 R3 a
  USB_OTG_BSP_TimeInit();
5 @: O3 K5 f% n+ M- q        USB_OTG_BSP_mDelay(500);   //Delay is need for stabilising the Vbus Low
1 @6 B  Q! R+ v/ Y9 C3 e% y}
mon51 回答时间:2014-4-1 10:55:30

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

采用内部的:USE_EMBEDDED_PHY  ,所以直接用IO连接U端口。
mon51 回答时间:2014-4-1 10:57:01

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

以下是ST原来的库函数定义文件头:6 r/ ?0 X' Y8 Y$ c4 i
#ifndef USE_USB_OTG_HS- J5 ]9 q9 ]6 k) Y8 {. r
#define USE_USB_OTG_HS
! [8 f. z' C& M: r#endif /* USE_USB_OTG_HS */4 c9 u2 t; c* z
#ifndef USE_ULPI_PHY
# R7 O" u( U/ J" Y/ @) s //#define USE_ULPI_PHY6 I: Y: G8 Z5 O) u
#endif /* USE_ULPI_PHY */
6 C  r: {$ r; w#ifndef USE_EMBEDDED_PHY0 m& j$ `- K, H0 g
#define USE_EMBEDDED_PHY
/ R9 x; z6 p2 y( h4 u  e% M#endif /* USE_EMBEDDED_PHY */
+ B4 [. c; _* R3 q2 X" M#ifdef USE_USB_OTG_HS / X7 @1 C# P5 R8 [
#define USB_OTG_HS_CORE
, P' W% y9 S& b4 F! C! f! E+ r9 N#endif
' Y8 M% l/ x4 z; ~. E, c/*******************************************************************************
+ Q5 X0 _% b  l5 b*                     FIFO Size Configuration in Host mode
  J- U/ s% x# f$ u  y) [*  ( P) J3 k. h8 D# j" \& h6 K
*  (i) Receive data FIFO size = (Largest Packet Size / 4) + 1 or
$ A" Y! ^) n% S( Y' t5 \*                             2x (Largest Packet Size / 4) + 1,  If a
: a. r: C9 l3 K*                             high-bandwidth channel or multiple isochronous
+ r+ ?0 M/ \8 r+ P*                             channels are enabled
& `1 V" K- k8 c3 G*
7 d% M! S5 A! D+ X*  (ii) For the host nonperiodic Transmit FIFO is the largest maximum packet size 5 \" B$ M! _; j/ j# p& O, h+ j
*      for all supported nonperiodic OUT channels. Typically, a space
8 S( e1 q+ K% e: G*      corresponding to two Largest Packet Size is recommended.& m( E  ]% ?. v/ U3 u
*( F$ B% h$ G( r' ^  Q* ]7 U) O3 l
*  (iii) The minimum amount of RAM required for Host periodic Transmit FIFO is 3 V" K/ j2 R/ ?$ h. n6 ~7 R
*        the largest maximum packet size for all supported periodic OUT channels.
# }# T5 Q2 a0 @% H*        If there is at least one High Bandwidth Isochronous OUT endpoint,
% r- ?  t9 x1 I+ ]8 O& W*        then the space must be at least two times the maximum packet size for 7 ]2 @; L- }, `; r
*        that channel.
/ z  u- s) E  I*******************************************************************************/
, G# [; \% ^3 @0 x* C2 C, R5 a0 d # S7 V* [5 b* Y! t1 b+ @
/****************** USB OTG HS CONFIGURATION **********************************/3 i$ W$ X8 P  W# R$ p
#ifdef USB_OTG_HS_CORE
' T2 o  N( ^# p #define RX_FIFO_HS_SIZE                          5121 D% q0 y. n: [. k2 b6 W4 ^* t, c
#define TXH_NP_HS_FIFOSIZ                        256
) i9 d% B! B! b/ c. s$ h #define TXH_P_HS_FIFOSIZ                         256, j, w5 B* T# U6 m& ~
// #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT& K  L4 z2 C+ ?) o8 Y
// #define USB_OTG_HS_SOF_OUTPUT_ENABLED
; `% ^: Y6 m2 P( d #ifdef USE_ULPI_PHY2 b- ?0 g$ U& t  t- X0 @  m/ y7 `) X
  #define USB_OTG_ULPI_PHY_ENABLED5 D. _5 ~2 L+ o! t+ B
#endif
  H! ?$ u# P: ~* Q #ifdef USE_EMBEDDED_PHY
$ D" V5 E8 l; Q' D# B7 Y   #define USB_OTG_EMBEDDED_PHY_ENABLED
  d/ P1 O) q! v3 d7 z) J+ M2 l& J #endif7 ]% v) @7 j. T
#define USB_OTG_HS_INTERNAL_DMA_ENABLED
" w0 q  @' |) ?; e/ i #define USB_OTG_EXTERNAL_VBUS_ENABLED* U! C$ Z9 _- U4 S# \
//#define USB_OTG_INTERNAL_VBUS_ENABLED9 u. x, _- ~( C$ G3 P5 l2 l
#endif
: f; ~+ s4 |) ?- y* |# C/****************** USB OTG FS CONFIGURATION **********************************/% ?" ~- b4 O- _8 S" A/ f& h/ O
#ifdef USB_OTG_FS_CORE
' f& l2 e' m/ t, w+ J. b# R #define RX_FIFO_FS_SIZE                          1288 O* o8 _$ I, t" n- ^7 d7 l3 U
#define TXH_NP_FS_FIFOSIZ                         961 U" v" J5 _( L/ G
#define TXH_P_FS_FIFOSIZ                          96
0 N/ y) `* N* {! C& @// #define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
2 [( c3 ^0 {) w3 I1 Z// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
3 ]. ?  Z, s4 J( W8 s4 w#endif7 f$ _  h5 Q# K. @2 C7 j
/****************** USB OTG MODE CONFIGURATION ********************************/7 {2 V/ @/ F  t8 o
#define USE_HOST_MODE$ o1 [, a) ]  c8 ]- |2 n
//#define USE_DEVICE_MODE& Q+ V7 B% H0 l  ]/ x3 D
//#define USE_OTG_MODE
, n# T! t) z& y* a2 ^#ifndef USB_OTG_FS_CORE
4 C0 G# T  T$ s! G #ifndef USB_OTG_HS_CORE
4 T4 o/ I% V# S5 O    #error  "USB_OTG_HS_CORE or USB_OTG_FS_CORE should be defined"0 S6 v! r) ~3 }( Z- O/ e5 m
#endif
2 m( X0 f4 H2 o0 e( ~#endif; y8 [+ |0 W" U( S
#ifndef USE_DEVICE_MODE
9 w. f& p7 K" v1 E6 F$ a" K# L #ifndef USE_HOST_MODE  v5 r8 k( i+ u$ {7 S; F
    #error  "USE_DEVICE_MODE or USE_HOST_MODE should be defined"1 e$ x- S5 X& `, z: U# w6 N
#endif3 u3 U9 I/ g# \6 |4 _1 t1 r% S
#endif* R% B: ?3 b8 N% P4 ~
#ifndef USE_USB_OTG_HS
, `* |! H: I6 _+ F- u+ x6 e) w$ T #ifndef USE_USB_OTG_FS( y5 C1 ^6 o* l" Q* p( t5 K
    #error  "USE_USB_OTG_HS or USE_USB_OTG_FS should be defined"0 A: b0 B) X1 l+ K+ U) f
#endif  H/ W( P; Z+ \0 K% f
#else //USE_USB_OTG_HS
3 ~" [% B0 ]  @5 C2 ~+ a #ifndef USE_ULPI_PHY
- c; ?+ w0 |: N. N  #ifndef USE_EMBEDDED_PHY7 ^& J, f4 Z* K$ i8 N
     #error  "USE_ULPI_PHY or USE_EMBEDDED_PHY should be defined"
5 i$ l& U, T+ w  #endif
$ j# X; W" B+ n9 p" H1 C5 \/ n  R& P #endif7 T+ w5 t  s4 o' G( |8 u9 S3 a) E
#endif' F2 G7 N& z2 z4 h0 H
/****************** C Compilers dependant keywords ****************************/
* d+ `7 u# W) \$ I$ d) b9 ^7 P/* In HS mode and when the DMA is used, all variables and data structures dealing
$ c2 b  q. d7 |+ x( R; D; }   with the DMA during the transaction process should be 4-bytes aligned */   
3 A: X/ w( ^% S$ w#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
2 h- [5 U4 }- \% S/ n! D  #if defined   (__GNUC__)        /* GNU Compiler */
5 H% k$ }  R+ Y8 _. Q% R& c    #define __ALIGN_END    __attribute__ ((aligned (4)))
1 O+ d3 ]* a  ^* B* o: E; H    #define __ALIGN_BEGIN         
+ m$ X- c" N; ?, Z2 [/ m6 N  #else                           6 o# h0 \' U: Y4 V
    #define __ALIGN_END
7 J) A. Q& B& a    #if defined   (__CC_ARM)      /* ARM Compiler */
1 F  G: }1 o( _      #define __ALIGN_BEGIN    __align(4)  
8 H* R$ j0 s: I6 G( x    #elif defined (__ICCARM__)    /* IAR Compiler */! a( l. I( c% ]& O1 z
      #define __ALIGN_BEGIN
3 C  F7 n2 A4 d6 O    #elif defined  (__TASKING__)  /* TASKING Compiler */
/ q* Q3 f0 l, o: K* l9 c0 g2 e. b* N      #define __ALIGN_BEGIN    __align(4) ; H0 e& B0 A; [( R
    #endif /* __CC_ARM */  8 C/ r, n6 x( y" F% G
  #endif /* __GNUC__ */
" Z9 A8 x% z. R# S! C) C$ z#else" ?7 k9 E: ~+ u( L. O5 m; v7 _
  #define __ALIGN_BEGIN
& b  }( ~2 ~" N! P5 H5 i  #define __ALIGN_END   
% ]# \! R) P1 \2 d: m, j#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */; W  E0 X4 P/ a% S/ k# u
/* __packed keyword used to decrease the data type alignment to 1-byte */. [$ }4 K7 y& a, I  b
#if defined (__CC_ARM)         /* ARM Compiler */
; f" Z& |5 U0 g) y3 `) u7 z0 G  #define __packed    __packed
3 m8 X: E( W, c8 S$ y#elif defined (__ICCARM__)     /* IAR Compiler */$ O) i* m2 J+ ^" ]7 }
  #define __packed    __packed% G, W8 A+ A  e3 G! ?: Z
#elif defined   ( __GNUC__ )   /* GNU Compiler */                        ; J* Q/ A! K( T1 R; R  d
  #define __packed    __attribute__ ((__packed__))" a7 h7 |) c2 k
#elif defined   (__TASKING__)  /* TASKING Compiler */
1 z, e4 Z" y( J9 t0 v+ ]  #define __packed    __unaligned2 e! W, A4 B& L# A
#endif /* __CC_ARM */
mon51 回答时间:2014-4-1 10:59:15

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

主程序非常简单:(这里是用U盘iap—BOOT为例):
( T4 s) ]  x% l+ Q6 u+ _7 Hint main(void){
+ g9 c2 {$ G, D   + Z2 Q: i7 B0 K2 L3 x4 |) z3 m+ x/ k
  /*!< At this stage the microcontroller clock setting is already configured,
# q- w! C$ k6 }. e7 u  this is done through SystemInit() function which is called from startup: K- f6 E6 ?, a( S
  file (startup_stm32fxxx_xx.s) before to branch to application main.
! Q+ U" k1 n2 b) \5 A- @0 }; x) c  To reconfigure the default setting of SystemInit() function, refer to! f2 t% G  b) p4 C5 F- f+ D
  system_stm32fxxx.c file6 D4 U% V$ m; F9 x$ V2 U
  */  # R' n6 ^( P  a
  
1 @) Y1 s* e" S& N( K  /* Init Host Library */
, _' e* t' \7 A7 ?( n1 R  USBH_Init(&USB_OTG_Core, ( H* U6 D, r$ C, h
            USB_OTG_HS_CORE_ID,, H" O4 L% X7 A9 B7 `' H
            &USB_Host,6 I/ A4 G4 R, S9 P9 Y" Y
            &USBH_MSC_cb,
; b9 s0 j$ p/ J8 m& I# F& T            &USR_cb);( w8 N: a2 S7 j* Z; z7 B' |$ t1 p
  
! x- D' T* s  ^: ^( j+ D2 K  while (1){& |' D, U, ~" g0 |0 r
    /* Host Task handler */& k$ ?$ c: ?1 N% ?! C
    USBH_Process(&USB_OTG_Core, &USB_Host);
1 J9 e7 @! ?* m                if(iapRun==0){
, j: c+ q( a2 N, r                        IAP_URN_UserProgrammer();
6 z& Q7 E/ t7 c' a5 O                }8 ?. _/ c- y- ?0 M
  }# m" v3 f% w1 N, p0 s
}
mon51 回答时间:2014-4-1 11:01:59

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

由于HOST-MSC和HID的初始化全部相同,这里先不介绍,不同点是从枚举后分析数据协议开始,所以我们在这里添加设备识别代码,然后再根据不同的设备,做相应的事情,这里主要是MSC的处理和HID设备的处理,同样也可以添加其他的设备.& Z' T: n: L. k) q- c
  case HOST_USR_INPUT:   
' t& d8 F* l9 m0 U    /*The function should return user response true to move to class state */& [: ~0 H, W: u* ?
          //修改:添加MSC-HID自动判别,然后再初始化CALSS-CB+ t: i6 G  x& R  F$ Y& [% a8 l
                if(JB_MSC_HID(phost,0)){ //0:判别MSC,1:判别HID
1 [& M1 d7 @' v9 T7 z4 O                        SetHOST_USB_MODE(0);
4 j2 j3 K" R# |6 h& ?) o& s1 o6 r  v                        phost->class_cb=&USBH_MSC_cb;1 S7 z! C! t6 R& b- L  ]
                        if((phost->class_cb->Init(pdev, phost)) == USBH_OK){
, o4 o; Y, }0 z+ X8 ]+ y5 R: v& U7 t                                phost->gState  = HOST_CLASS_REQUEST;     : E/ y6 P" ]8 e; k6 h7 Y3 h  m8 f
                        }     
* H/ _/ F) P, s                }else{1 O6 w% r: M" k6 v2 E/ W
                        if(JB_MSC_HID(phost,1)){ //0:判别MSC,1:判别HID4 r/ q# L- @2 l6 q9 c
                                SetHOST_USB_MODE(1);- ~& P& d, D4 d8 i" e
                                phost->class_cb=&HID_cb;+ C5 f' j4 e% M' {
                                //phost->usr_cb=&USR_Callbacks;//???????
/ ~9 I% L# L- b; g" _                                if((phost->class_cb->Init(pdev, phost)) == USBH_OK){4 K) S+ h; v( R3 R$ r: M& A" d
                                        phost->gState  = HOST_CLASS_REQUEST;     
1 I! w  F" n% [# ^                                } ; q9 C0 i* P* Y% ]
                        }
/ A! {8 Y' F+ M7 L4 L    }   
$ z$ h/ F* u9 ~' ^9 B4 V$ c  \% ~    break;
mon51 回答时间:2014-4-1 11:02:43

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

case HOST_ENUMERATION:     
2 I/ H6 j5 {! R2 F8 u' z* k6 }    /* Check for enumeration status */  
2 h3 t3 N( ^' E) H% G) {1 x    if ( USBH_HandleEnum(pdev , phost) == USBH_OK){
7 ]8 _% \5 l) q, {; w      /* The function shall return USBH_OK when full enumeration is complete */* w' r* ?7 L, Z9 T, \# Y. O% u9 h& [
      8 k0 f( p7 A& m
      /* user callback for end of device basic enumeration */( W& B/ N. T; [
      phost->usr_cb->EnumerationDone();
2 z* d+ k5 i6 @5 k+ q' Y6 L      ! v+ m# A9 X! |# @, {
      phost->gState  = HOST_USR_INPUT;    3 j& m/ z9 C8 W- h2 e. J& V/ C1 }
    }, t$ x& J7 z( i, u5 T, [/ k
    break;
mon51 回答时间:2014-4-1 11:03:56

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

这是判别代码:
! ], D1 f8 L+ [/ _+ I3 ?//修改:添加MSC-HID自动判别,然后再初始化CALSS-CB, A8 A. G+ O9 c. K# ~
unsigned char JB_MSC_HID(USBH_HOST *phost,unsigned char flag){//0:判别MSC,1:判别HID
. }/ H; K2 r9 Z# U# {. \        % j0 y9 o9 N1 r
if(flag==0){& B$ Q+ X; n! f+ P1 D8 |8 E$ L5 i
        if(phost->device_prop.Itf_Desc[0].bInterfaceClass == MSC_CLASS){1 p* Y  z8 x6 y; I- L
                if(phost->device_prop.Itf_Desc[0].bInterfaceProtocol == MSC_PROTOCOL)        return 1;+ G2 \/ z7 L' r1 |% C
         }1 j5 f+ a" a/ X9 t1 h4 e8 V
}else{2 s; u) b+ ?8 Z% q
         if(phost->device_prop.Itf_Desc[0].bInterfaceSubClass  == HID_BOOT_CODE) return 1;
! Y- J' Q& W2 B# }- _6 m" x }9 ~) A& q8 H9 ^, E* N
return 0;
$ V& v3 v3 B. h7 i7 \/ O* z$ H}
mon51 回答时间:2014-4-1 11:05:29

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

发的帖子,自动缩进的功能没有了,看起来不方便。
mon51 回答时间:2014-4-1 11:11:33

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

另一个重要的函数,它影响了V2.0与V2.1对U盘的兼容性。
9 u  n2 @; d5 @) D4 p/ S1 n8 L, B/**) p- G$ ~4 R2 w# p
  * @brief  USBH_CtlReq* {/ g) v3 H) J5 N7 o/ ~
  *         USBH_CtlReq sends a control request and provide the status after
+ z  r9 D5 w+ s$ k8 R" j! T  *            completion of the request3 ?2 K5 j( ?3 z4 ~
  * @param  pdev: Selected device/ x" Q4 v; c8 O$ y9 F" L
  * @param  req: Setup Request Structure
' K+ w) X/ n" w# @7 L  * @param  buff: data buffer address to store the response7 n! _+ b& s9 G! i! f. H
  * @param  length: length of the response
' a& b# C: [* G' m: u! E  * @retval Status
9 Q0 E' e6 Y% `+ \  */
8 K" i8 p4 @) z3 z! WUSBH_Status USBH_CtlReq     (USB_OTG_CORE_HANDLE *pdev,
/ t1 L* I8 g8 T* T' C" q( X) Q                             USBH_HOST           *phost,
# G8 K2 U1 ?# @/ r/ s, `                             uint8_t             *buff,
) ]  O. i9 h" G6 l+ j0 P# M/ r                             uint16_t            length)5 Q# F, f$ a5 w* o* |
{9 M, |& W  v4 G  W$ o7 [, n+ M* l+ ^
  USBH_Status status;6 P5 g& Y, a1 r( M' w# s. m
  status = USBH_BUSY;
3 n( G  w6 k. X' A% [    H4 ?1 ~, K1 N$ R9 V
  switch (phost->RequestState)
/ J5 z. a" v9 d3 ]. D2 J0 ?  {
. J4 g$ e; ^# A2 ^7 l1 ]8 e  case CMD_SEND:3 B$ r: ]; }# f! D5 {/ R6 n
    /* Start a SETUP transfer */
( }& ]4 v6 L1 B2 X. V% |    USBH_SubmitSetupRequest(phost, buff, length);  n; I5 Q! h9 w
    phost->RequestState = CMD_WAIT;
5 b' x/ Z' s0 g5 d' ]    status = USBH_BUSY;
# g7 l; ?* T& r$ k% s( Y8 r1 A    break;$ ^: \4 `/ x& {* F) m. y5 c: b
    ' q: g# U( l5 _! `: x$ Z- X  I
  case CMD_WAIT:
+ f6 U6 ]+ c- Q3 B6 f5 ~                if(Get_HOST_USB_MODE()==0){ //--2014-3-30 添加2种模式判别!!!
+ ~* H+ \5 p6 l# {: C, L. S) s                        if  (status == URB_DONE){8 R! U" ?: }5 |- G- M' B5 X! Q
                                /* Commands successfully sent and Response Received  */      
5 Q% J3 B7 Z& d" z! s$ n* c                                phost->RequestState = CMD_SEND;" w% F* B8 q) S0 c% q8 h9 Z
                                status = USBH_OK;  n+ f8 B0 i& B0 G' [0 I
                        }
3 p7 G* R' X5 R6 V! D                        else if  (status == URB_ERROR){- F0 B4 g* ~% ]. l* O
                                /* Failure Mode */
" r; C3 P- a1 E. S                                phost->RequestState = CMD_SEND;
+ U& u# V7 i, _% ]( f4 x                                status = USBH_FAIL;
2 o/ o2 p0 O* w6 J8 Y# w1 C* g* R7 d                        }   9 {/ p% X  Q$ j+ O: d% U# H
                         else if  (status == URB_STALL){8 I+ ]$ o7 G& Y+ ?
                                /* Commands successfully sent and Response Received  */      
1 `- ~3 h% w1 D% i1 h                                phost->RequestState = CMD_SEND;* ]% \% f; f, v$ O
                                status = USBH_NOT_SUPPORTED;! I2 M8 ?- m9 r$ l2 o8 B" N
                        }8 \8 x# |2 f/ V$ c
                }else{
" c* z! G; D6 H! `                         if (phost->Control.state == CTRL_COMPLETE ){//HID 处理!!% L0 u, \5 q8 w$ c, Q' f
                                        // Commands successfully sent and Response Received      
9 B# ~6 g1 v' D8 U                                        phost->RequestState = CMD_SEND;4 x% H' c7 n  X) O0 {- R
                                        phost->Control.state =CTRL_IDLE;  + f  _0 m. ]* U2 Q, S
                                        status = USBH_OK;      
3 B9 H, D6 @  ], ]3 G8 o                                }
- F- _' @7 t0 f                                else if  (phost->Control.state == CTRL_ERROR)
0 V& K1 U2 L7 l4 b; W, d8 I7 X                                {
# N  \* I) T. T7 n                                        // Failure Mode 7 ^+ C; o  r- g! C* D* z
                                        phost->RequestState = CMD_SEND;! Z. H& G+ e4 |* w8 C0 j5 |: q2 F
                                        status = USBH_FAIL;* X5 Q$ Q* M3 f( r
                                }   , X( X. G( N/ D" b7 @' A' ~
                                 else if  (phost->Control.state == CTRL_STALLED ). h- S5 r" N2 L# X$ a5 G9 O8 ^
                                {$ E6 j) e6 L& m7 k+ e) Q4 l
                                        // Commands successfully sent and Response Received         
* S' r7 z8 o9 a                                        phost->RequestState = CMD_SEND;
  x6 k0 _9 V8 d$ s/ E& a5 n                                        status = USBH_NOT_SUPPORTED;
/ A* V5 u7 R' d                                }
1 G1 d' C9 E+ f3 n/ u  p  G                }0 G8 s3 ]9 w; {. U! q, I
        break;
& ~1 u! ]2 F# V5 Y% u5 t- `2 j        //-------------------------------------
6 \( X& _: P: A, Q/ F8 U$ g  default:7 M, m+ M+ ?+ F, @0 y- u$ |
    break; 9 i+ p- m, [- E% R( z
  }
; F$ A8 w# B# d& v. E  return status;( G8 U- U1 `8 n, J7 \- S
}
zydwh 回答时间:2014-4-1 12:33:19

RE:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

请把程序打包后上传。谢谢!
风云1999~ 回答时间:2014-7-29 14:35:17

回复:【MCU实战经验】STM32F207的host USB的MSC和HID的合并开发

 正需要看这方面,怎么看不见
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版