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

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

[复制链接]
mon51 发布时间:2014-3-31 18:51
STM32F207的HOST usb 非常有用,可以接U盘,也可以接USB接口的键盘。非常方便,但ST的U库V2.0,V2.1实际使用都有问题。
; v( V: I$ ], {! K) o* f经过修改,现在可以很好第读写U盘和连接HID键盘。
6 \* {% E* C0 t/ d. ?4 V7 D$ r4 G  e! f程序代码的核心是V2.1的库。; x1 z' C  Q5 y7 L
通过U盘D读写,可以方便地进行IAP-BOOT操作。以及用户键盘操作!
1 l3 e+ u; M& \% B7 U
赞 收藏 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的合并开发

继续发图:$ X' y2 R9 b8 E2 k9 Y. t
电路很简单,占用F207的HS-usb:
mon51 回答时间:2014-4-1 10:53:18

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

回复第 3 楼 于2014-04-01 10:51:07发表:
; h' C( s1 {+ J1 s; [- r继续发图:
! v" L0 a2 k' z/ c电路很简单,占用F207的HS-usb:: C+ Y* F2 d5 K& [
 3 b. k) J- ]) W/ [  x

, }& r8 J" S: E$ D# X% d 
USB.png
mon51 回答时间:2014-4-1 10:55:01

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

初始化端口程序:
$ u6 s( n( u% T  L: G; E& \/ [' uvoid USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev){
" V4 a# w7 O$ U3 e  GPIO_InitTypeDef GPIO_InitStructure;% B7 ~: @/ g  M4 w  k
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);0 t7 T+ r* Z5 d4 e5 e! y7 t5 y
  # e" s% i4 u4 |) p1 v0 X9 T- C
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12  | 2 c5 \5 @  H$ o$ s+ P" U
    GPIO_Pin_13 |, {' t/ D6 X/ }: c2 j
      GPIO_Pin_14 |
! U' u% u2 y  u  Q        GPIO_Pin_15;
  @- s2 q$ K+ E3 X  u) G  7 T' w! s+ g$ g- N( c4 `
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;( p. \" {3 X' H4 F  n6 i1 L1 {
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
1 {- T' O! ~5 \; E5 A# C0 Z  GPIO_Init(GPIOB, &GPIO_InitStructure);  - o. H% ~0 l5 F6 t( w# `8 s
  
! @+ k$ t- C5 C! v  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_OTG2_FS) ; ( t8 g) |, H4 m5 F& c( d! L% `
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_FS) ; 6 y* K3 s; E; B) X
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG2_FS) ; 1 D- |" p0 y6 {- ^# K; ~
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG2_FS) ;
4 W9 c' z' \. b! L) i        //---------------------------------------------------------------+ ^# P. k2 \; x
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ;
7 t; i, ^5 M5 K1 \4 A0 g$ a" O: R        //-----------------------------------------------------------------9 o: F7 v& Z* A; W4 I
        //Vbus_EN   根据实际电路修改!0 U' f* D1 P, f, c% v0 `5 X
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE , ENABLE) ;  
# b$ k0 R$ q% u. C2 A, {  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- z# T6 V! A4 Y* j( l9 u  B        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
" M* E1 f$ q. f! W  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
! I7 O! e  t" ]+ N* E% @' L/ g  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;    s# Q$ V1 h' k. w
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;' }, q% H. G: M  c; z; U+ `
  GPIO_Init(GPIOE, &GPIO_InitStructure);
( y$ ~5 d6 U- @4 f         
" _; @. b$ U+ K8 I        GPIO_ResetBits(GPIOE, GPIO_Pin_0);
1 e) l# J; b8 q1 h5 k8 n6 }9 k        //-------------------------------------------------------------------8 g; O/ K3 a3 n
  USB_OTG_BSP_TimeInit();
5 z& a* m2 B8 g        USB_OTG_BSP_mDelay(500);   //Delay is need for stabilising the Vbus Low
6 H9 }* V4 a  E' M' f. k}
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原来的库函数定义文件头:  H* `8 Y2 q% l3 n& S( r+ Q! A
#ifndef USE_USB_OTG_HS
( I! ^* H! J) v8 V$ L2 l% @#define USE_USB_OTG_HS( M3 }8 w  `3 A3 B9 V7 C
#endif /* USE_USB_OTG_HS */
4 B; ]; Y6 H& \; x( i3 O( ?#ifndef USE_ULPI_PHY1 z3 {6 Z5 Z6 k9 O! y1 [2 x2 f
//#define USE_ULPI_PHY# \6 R6 d! d) \+ A% P$ o; A
#endif /* USE_ULPI_PHY */
. b8 G1 @: i" q7 B( ?3 [1 Y2 K#ifndef USE_EMBEDDED_PHY
2 E- N+ ~) f3 I& ~  m% C$ l& [9 U#define USE_EMBEDDED_PHY9 I" L; D8 Q1 C3 Z, X
#endif /* USE_EMBEDDED_PHY */
" t/ U5 [# B3 h% F3 M- ~#ifdef USE_USB_OTG_HS " C& {# @" V- \6 y, k: v
#define USB_OTG_HS_CORE
  P2 n: a% l/ F* q- F9 m#endif. `" h$ _, I& R8 q3 `9 x1 c6 J9 `
/*******************************************************************************0 U+ b; _* f1 f8 n
*                     FIFO Size Configuration in Host mode( J& K2 [; p1 G. _( n
*  : J: c4 V0 `6 S8 s0 E# i
*  (i) Receive data FIFO size = (Largest Packet Size / 4) + 1 or
/ Y; d8 @* v. A. @# {" `3 E2 y*                             2x (Largest Packet Size / 4) + 1,  If a
2 {$ X% R; }7 \/ M, N# b( T*                             high-bandwidth channel or multiple isochronous
  P7 [, n1 n: g: `$ x$ J, J*                             channels are enabled* V, \2 f; I1 [6 U0 S
*
( x4 |; b9 X- p; ~) ]! z) m  G*  (ii) For the host nonperiodic Transmit FIFO is the largest maximum packet size * G$ f4 B3 \: f; ~5 u) x" v& c
*      for all supported nonperiodic OUT channels. Typically, a space ( j! b4 @2 m& u+ }
*      corresponding to two Largest Packet Size is recommended., C; D3 M6 h9 n4 x, ]. v# d# z# R% B
*/ e' s* g) {& S' q; U8 E
*  (iii) The minimum amount of RAM required for Host periodic Transmit FIFO is 3 C" ~! c  Q6 [( E; D, l; N) W
*        the largest maximum packet size for all supported periodic OUT channels.
2 j' d1 h# W5 E2 N4 e*        If there is at least one High Bandwidth Isochronous OUT endpoint,
( \8 V0 H$ r) H*        then the space must be at least two times the maximum packet size for 1 m4 A- h2 d; }  t
*        that channel.( y' l8 h8 V9 ~* s8 X
*******************************************************************************/
& e- ^# s( i  D+ _+ k. r 1 L# \3 d% r4 y6 m1 H
/****************** USB OTG HS CONFIGURATION **********************************/8 L( [+ k% P( \
#ifdef USB_OTG_HS_CORE
0 ^9 J1 N9 j& x! c #define RX_FIFO_HS_SIZE                          5125 U3 ^  Z/ h% s! l1 J
#define TXH_NP_HS_FIFOSIZ                        256. P5 {3 w2 i/ F* K  C- n+ ~
#define TXH_P_HS_FIFOSIZ                         2564 _+ t6 K* e( x! T- Q3 f
// #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
% M6 R; R. i- L// #define USB_OTG_HS_SOF_OUTPUT_ENABLED8 U+ M5 W6 ?! R- `& X5 s8 r
#ifdef USE_ULPI_PHY
* K3 v& y# J, l5 F' N. r/ W  #define USB_OTG_ULPI_PHY_ENABLED. E* e) j# i- k4 m, h* U
#endif9 f( ~: }& I( ~$ Z  W0 O
#ifdef USE_EMBEDDED_PHY
  g& O5 [! j7 L4 K; M   #define USB_OTG_EMBEDDED_PHY_ENABLED+ P0 I- I! U. E* ?# E
#endif
) F$ R9 f  E3 A* {, ~  B( |7 f #define USB_OTG_HS_INTERNAL_DMA_ENABLED
+ c% l& i! `2 x- w #define USB_OTG_EXTERNAL_VBUS_ENABLED. N3 ?" ^0 J; N  U2 O. h% _8 E" n6 [
//#define USB_OTG_INTERNAL_VBUS_ENABLED
, ~% C: v5 ?4 b) }$ g* a#endif& m3 P8 y, c3 G4 L' j
/****************** USB OTG FS CONFIGURATION **********************************/
: Y: {$ J6 _# C" B+ H/ H#ifdef USB_OTG_FS_CORE
! W$ M& }$ r6 M! D% U" d" {: B7 i #define RX_FIFO_FS_SIZE                          128
/ @+ a  a0 l0 ]) p #define TXH_NP_FS_FIFOSIZ                         96
; ?* T1 x5 L$ l1 R. W #define TXH_P_FS_FIFOSIZ                          96
/ y' @8 z$ H( P, L7 |// #define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
0 D* [) q- f# [. `5 s+ P// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
8 Y9 {1 u  _7 s" i8 V% f  e. M#endif, c" N+ [" I6 I4 H: e
/****************** USB OTG MODE CONFIGURATION ********************************/2 C) d2 m( r9 V; f/ K
#define USE_HOST_MODE( E, j) f4 d8 c+ Q$ X( G/ q
//#define USE_DEVICE_MODE
1 @  y( N! C4 h& ~//#define USE_OTG_MODE* c' B% k; g2 N8 M1 H
#ifndef USB_OTG_FS_CORE3 K9 I( N- f+ D4 P& ]
#ifndef USB_OTG_HS_CORE* b0 o! X4 w2 V, y+ w
    #error  "USB_OTG_HS_CORE or USB_OTG_FS_CORE should be defined"4 \6 k  E6 L* h) H8 ?) e7 o
#endif" B) q% w( z; y1 j( x* l4 f
#endif
1 J" W  n4 i5 |! g4 D5 p#ifndef USE_DEVICE_MODE4 v, U; t9 t$ C, Q' }
#ifndef USE_HOST_MODE) `9 C9 `  t( C! O% S6 [: g
    #error  "USE_DEVICE_MODE or USE_HOST_MODE should be defined"' l; T4 G2 H; E$ ?" i; ?- g/ L
#endif1 e) o( H7 F0 L
#endif% Z* z* J4 q( T& Z5 y: T
#ifndef USE_USB_OTG_HS( N7 H1 h# E7 h3 b
#ifndef USE_USB_OTG_FS+ ~6 `% O! g$ t1 R  `( [
    #error  "USE_USB_OTG_HS or USE_USB_OTG_FS should be defined"! y/ _& i2 v: s- A: Z
#endif
$ t7 x! ]. l. j$ b% [2 A$ C: p#else //USE_USB_OTG_HS* S2 z% O9 f" o1 x" ?
#ifndef USE_ULPI_PHY
' y1 ~- o, m! C" w' Z: N  #ifndef USE_EMBEDDED_PHY
/ T3 B- B" O9 H) Z6 b     #error  "USE_ULPI_PHY or USE_EMBEDDED_PHY should be defined"
# b+ ?" R( u; v4 ]9 n: [6 r  #endif. M+ c& n; l$ o; w( r5 e; J( d: b
#endif
7 G/ ~. Q* q! N. J. y! b0 L#endif
! H$ j# [  K- j5 A9 I( l/****************** C Compilers dependant keywords ****************************/
: p  `' |3 F; @/* In HS mode and when the DMA is used, all variables and data structures dealing/ S% ?5 y6 v+ g' h) [$ z! \5 z% f
   with the DMA during the transaction process should be 4-bytes aligned */    ; t  Q: V& i( V
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+ L8 r- u/ s0 B5 O% E" m! q: }  #if defined   (__GNUC__)        /* GNU Compiler */: N6 U+ u; [+ Y* S2 w/ q* f
    #define __ALIGN_END    __attribute__ ((aligned (4)))
- }: L. Y) g& q# h$ t- M    #define __ALIGN_BEGIN         
3 C# G/ G* J- }% V. ?$ \  #else                           0 c% S4 y3 N" a) b! s
    #define __ALIGN_END9 y6 E9 D4 B0 g- I
    #if defined   (__CC_ARM)      /* ARM Compiler */
. w* b7 S3 G7 I& z0 Z! I      #define __ALIGN_BEGIN    __align(4)  4 I8 m9 ?. Z9 c4 i% |
    #elif defined (__ICCARM__)    /* IAR Compiler */9 l3 y( Y& t( \
      #define __ALIGN_BEGIN , e) t  h' k6 h' U5 \6 W5 [( Q- ?/ Q
    #elif defined  (__TASKING__)  /* TASKING Compiler */- z5 @9 T4 a& t3 b6 _
      #define __ALIGN_BEGIN    __align(4)
4 o* I  Z* Z/ Z% \, \    #endif /* __CC_ARM */  " h' m3 `# m  _- b; D
  #endif /* __GNUC__ */ 9 T1 w' N7 ?# j# A6 [% w* H3 O! }
#else
9 P1 E6 m( o/ O0 d' J) i  #define __ALIGN_BEGIN
7 P  R0 V( L2 z1 C8 \  #define __ALIGN_END   
1 h. w; \1 \; U) a#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */, b2 [, h+ L8 `( v# X
/* __packed keyword used to decrease the data type alignment to 1-byte */
/ N6 y* O) ~4 D5 X$ h8 G#if defined (__CC_ARM)         /* ARM Compiler */& e0 H! _+ O! ?  s) ~6 I8 T3 h: \) K
  #define __packed    __packed
) T7 O" \/ t8 k#elif defined (__ICCARM__)     /* IAR Compiler */5 z% o# l6 k$ i+ D' ?4 L
  #define __packed    __packed
0 }3 ~- ]9 D, A' M( \#elif defined   ( __GNUC__ )   /* GNU Compiler */                        $ e, X$ \; [( ]1 J3 ?
  #define __packed    __attribute__ ((__packed__))
$ r& R! b0 H, R0 s#elif defined   (__TASKING__)  /* TASKING Compiler */& d3 B) v4 a4 G; x
  #define __packed    __unaligned
, g/ q( R0 x: c' [#endif /* __CC_ARM */
mon51 回答时间:2014-4-1 10:59:15

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

主程序非常简单:(这里是用U盘iap—BOOT为例):7 `' u1 Q5 c+ E  j) b
int main(void){
3 ~5 ]9 \0 ^7 A1 w; U; s6 y, H   0 b7 p; @- o' _: y& U. T
  /*!< At this stage the microcontroller clock setting is already configured, ' ^" N7 l& t5 j; s
  this is done through SystemInit() function which is called from startup
6 h& Q' G+ Z! b3 k" O) z  file (startup_stm32fxxx_xx.s) before to branch to application main.: s0 `6 l* Z. U- ~3 e1 M
  To reconfigure the default setting of SystemInit() function, refer to
* c- i' q$ P- ~7 P/ `" ?  system_stm32fxxx.c file# h* S  ~$ i5 f# l* l
  */  2 v- p( ?6 {2 g
  
. F) N( n0 u' L* ~  /* Init Host Library */# |2 ?. j3 J; L3 `2 a. Q0 ]
  USBH_Init(&USB_OTG_Core, * W" i9 F* y4 U
            USB_OTG_HS_CORE_ID,6 j0 F! ~' J: T, [8 z- X
            &USB_Host,
- R/ T" B& J* \            &USBH_MSC_cb,
9 y. [) N* K0 R3 y0 c4 {            &USR_cb);
/ j9 R+ [/ G' e  3 _' U$ Q7 W' B, ^) }3 o4 C0 e& \
  while (1){( w3 _& j+ v+ R" r0 q) t; C
    /* Host Task handler */  {' I, P! O4 @; m1 P0 `
    USBH_Process(&USB_OTG_Core, &USB_Host);
2 |+ H* n" N5 G8 a( T6 K9 b                if(iapRun==0){) b- z! I/ H2 L' ~% g
                        IAP_URN_UserProgrammer();
3 J' F6 C2 v. Y1 a                }* P. A4 W1 @* a4 |
  }
4 P% y4 [: X* q}
mon51 回答时间:2014-4-1 11:01:59

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

由于HOST-MSC和HID的初始化全部相同,这里先不介绍,不同点是从枚举后分析数据协议开始,所以我们在这里添加设备识别代码,然后再根据不同的设备,做相应的事情,这里主要是MSC的处理和HID设备的处理,同样也可以添加其他的设备.; G) C  |$ W6 s: L
  case HOST_USR_INPUT:    + u" t5 ~2 s# b% ~7 A
    /*The function should return user response true to move to class state */
$ h: d3 l4 e/ i% L          //修改:添加MSC-HID自动判别,然后再初始化CALSS-CB% A3 x' A2 R! H
                if(JB_MSC_HID(phost,0)){ //0:判别MSC,1:判别HID! f: L6 t9 x7 s: b8 H
                        SetHOST_USB_MODE(0);9 f6 e' s" W  D9 v. r
                        phost->class_cb=&USBH_MSC_cb;
4 k) U  n  `/ L, g! \4 q' Y$ |! D- w                        if((phost->class_cb->Init(pdev, phost)) == USBH_OK){- [5 C8 E8 E9 t
                                phost->gState  = HOST_CLASS_REQUEST;     / {. {3 y; l- p: w7 j- \
                        }     9 G5 S" _* Y6 C
                }else{. Y! F  U5 E) @: J1 O4 i. K6 o
                        if(JB_MSC_HID(phost,1)){ //0:判别MSC,1:判别HID
+ N; c8 k( D. F/ _1 {- {! l0 Q, D                                SetHOST_USB_MODE(1);( |) q2 ^% _2 R1 N/ U+ l
                                phost->class_cb=&HID_cb;  E( g" N! b/ [4 W- e0 P
                                //phost->usr_cb=&USR_Callbacks;//???????
9 S+ P9 {, C* G5 h1 v* I& _                                if((phost->class_cb->Init(pdev, phost)) == USBH_OK){: G5 K. I5 P7 t' @# }
                                        phost->gState  = HOST_CLASS_REQUEST;     
' W' b7 J6 ?9 X1 i/ f$ O+ d                                } / y! l7 Y1 E! h* y
                        }
) u9 b7 f6 N8 V: \    }   ( ?$ A5 S+ P+ {& r$ [
    break;
mon51 回答时间:2014-4-1 11:02:43

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

case HOST_ENUMERATION:     
3 P# ~, C- i/ P! _. n/ j! S    /* Check for enumeration status */  
8 j2 |" n$ c4 Z+ f" M# O% P    if ( USBH_HandleEnum(pdev , phost) == USBH_OK){ 0 i9 L8 L" H/ [3 ]% {; Y/ H7 V3 r
      /* The function shall return USBH_OK when full enumeration is complete */8 y: b3 D. Z. r' Z" Y
      
$ x- N( _& a9 U- P      /* user callback for end of device basic enumeration */
( C7 f( f. D' @) {5 V" |      phost->usr_cb->EnumerationDone();$ X5 Y! K7 [+ {# B
      : s2 Y; \' q+ A) X
      phost->gState  = HOST_USR_INPUT;   
) k. E+ [; H5 H! r& U    }$ t# ^& I6 N+ T
    break;
mon51 回答时间:2014-4-1 11:03:56

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

这是判别代码:1 M) v* {- ~7 ~; q1 e" ^- O, X
//修改:添加MSC-HID自动判别,然后再初始化CALSS-CB
; A# w: a* k: T9 E' _; i5 m1 ?unsigned char JB_MSC_HID(USBH_HOST *phost,unsigned char flag){//0:判别MSC,1:判别HID% _* ^4 Y3 G& g% z8 Z
        . J" `8 G% ^3 D
if(flag==0){3 Q" r' o; g; p: Y! e6 s& _% t) U
        if(phost->device_prop.Itf_Desc[0].bInterfaceClass == MSC_CLASS){- R+ R7 V2 h5 C- u  B* Y
                if(phost->device_prop.Itf_Desc[0].bInterfaceProtocol == MSC_PROTOCOL)        return 1;7 x( {' H; ?; f  f( g9 G
         }  W& T! D% ]" P; p' H6 P
}else{  l+ i; e5 \' [5 M
         if(phost->device_prop.Itf_Desc[0].bInterfaceSubClass  == HID_BOOT_CODE) return 1;
  ^4 ?5 K( S7 X0 I }( Q+ B7 A7 N$ v. w- d
return 0;7 w5 b! Y: N2 Z5 B( ~8 h9 p
}
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盘的兼容性。( ?; w3 `3 `, a1 f9 c' E0 z
/**
) t1 r5 @+ S& o7 v  * @brief  USBH_CtlReq
) b" J% \2 [. E. r( I5 _1 y  *         USBH_CtlReq sends a control request and provide the status after ' C/ A0 E& o0 ~; o; X
  *            completion of the request
3 _/ i7 x4 ?: E/ ]$ M  * @param  pdev: Selected device
& @$ x; v0 t7 w  * @param  req: Setup Request Structure
: @" q- j0 {% m% ^3 e  * @param  buff: data buffer address to store the response
& ~" \) _( f2 T  y- {, q  * @param  length: length of the response
. c8 q& K, D5 Q8 ~" x  * @retval Status6 N% d# ~$ K, q, ]2 u) F+ y
  */3 L, C. M2 {4 D9 l; s
USBH_Status USBH_CtlReq     (USB_OTG_CORE_HANDLE *pdev, * `1 Q3 |. I3 U
                             USBH_HOST           *phost, - O& N, f" Q$ G8 p( C0 g6 |" E. m
                             uint8_t             *buff,
# \* }+ u- _' W9 S, H( q' @* b                             uint16_t            length)
& r( e( `" {8 W' P7 \" s{
1 B. \8 v; t8 z2 t4 Z. X9 `  \  USBH_Status status;
% q# @9 i# g0 L. T) f4 B  status = USBH_BUSY;
4 A9 G& e6 z4 y2 z1 l9 F  
( s+ V3 ^# t, h  switch (phost->RequestState)
+ ~# h  Q" B) g1 ?  {) x" B0 c( d8 z1 P  g
  case CMD_SEND:
! _( g$ i$ T9 i1 [3 D  r  W    /* Start a SETUP transfer */
9 g9 p+ Q  X- e7 y' X8 Z% `* S    USBH_SubmitSetupRequest(phost, buff, length);, R+ f- Y* N7 h1 G
    phost->RequestState = CMD_WAIT;
% ~% I/ z( ^+ a  m- o    status = USBH_BUSY;  ]/ [3 P, g+ E$ b9 _3 a! F
    break;
3 O5 ~1 D' {2 _& G4 W   
" a3 S# l/ k) A  case CMD_WAIT:* L% F6 b9 j* h
                if(Get_HOST_USB_MODE()==0){ //--2014-3-30 添加2种模式判别!!!/ r. z# c2 |/ O- |
                        if  (status == URB_DONE){! `! S) i' h( p# b+ f$ ^' B
                                /* Commands successfully sent and Response Received  */      
- @) [# Y3 d" |& i% c# F6 X                                phost->RequestState = CMD_SEND;+ A) N& a0 m! z1 h- R) ~$ l
                                status = USBH_OK;: S5 Q; ?6 A4 Q( M$ g8 W! c) {
                        }' P6 D& C% W5 l' z
                        else if  (status == URB_ERROR){
0 ^+ j0 u! e7 t0 f; Q' {                                /* Failure Mode */
, L' C( |0 ^) u8 v% Y                                phost->RequestState = CMD_SEND;
$ N1 m. |. l/ J5 N& G/ w                                status = USBH_FAIL;
4 N: y' I+ o* z+ G                        }   
' G2 O& X% X" P7 |                         else if  (status == URB_STALL){
+ ~7 j" X8 i& X9 R3 X                                /* Commands successfully sent and Response Received  */      
7 y9 o: _! J: h; b                                phost->RequestState = CMD_SEND;
' |6 K4 p# X, y5 ~: p/ G1 F) V; Q                                status = USBH_NOT_SUPPORTED;* b5 |& e( E) ~/ Y( t2 Y7 h
                        }" I* I1 ]6 z" }" q+ O
                }else{" s- P  E7 z5 \* H
                         if (phost->Control.state == CTRL_COMPLETE ){//HID 处理!!4 K$ s; W2 x/ |
                                        // Commands successfully sent and Response Received      
2 ^/ F" v$ `$ C; Q5 u! F9 c                                        phost->RequestState = CMD_SEND;
1 v* w; W1 }. h1 y$ _( W# o" ^3 |* H                                        phost->Control.state =CTRL_IDLE;  
# O. d5 K0 _- O, {7 n                                        status = USBH_OK;      
1 ]; r/ V: V4 y- i                                }
+ i' m" W. a8 l" |2 K$ W! Y- K                                else if  (phost->Control.state == CTRL_ERROR)
9 |1 K9 M/ b0 Q3 m3 p                                {  n" V' i# G+ i' ~9 }& v' T* Z9 u2 _% A
                                        // Failure Mode : _' y+ L- P' t# r
                                        phost->RequestState = CMD_SEND;
; b% w% G* X! m- w! T/ B                                        status = USBH_FAIL;
0 b1 o' n/ n( h* I7 y# X" _                                }   
* |: \& p  I: N                                 else if  (phost->Control.state == CTRL_STALLED )
7 Q0 M2 u% d, S. S& n: B                                {! s$ X) |8 T4 g4 }
                                        // Commands successfully sent and Response Received         
* c& r3 J) L. }& S( a( i                                        phost->RequestState = CMD_SEND;8 B1 l8 Q5 _4 s& l( `
                                        status = USBH_NOT_SUPPORTED;
. T5 x: W1 _+ y5 f                                }
" h! C& ]# i/ Q7 o3 Q. C+ C0 R, Y                }
$ O6 b3 w8 x- x, N! ]; ?        break;
( o9 l5 s1 {8 v% q. {4 J        //-------------------------------------: C2 `* y  M9 P6 W! s; y
  default:! K* R. I% f) x7 L$ L' q7 x
    break;
1 ^8 v3 {1 Q6 R: l5 E  }( ~' X7 g; i9 F- s* x  A- b7 g! m5 F
  return status;! o8 \, D- y: a3 r5 R
}
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版