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

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

[复制链接]
mon51 发布时间:2014-3-31 18:51
STM32F207的HOST usb 非常有用,可以接U盘,也可以接USB接口的键盘。非常方便,但ST的U库V2.0,V2.1实际使用都有问题。
  Q4 X- y! T) M4 u经过修改,现在可以很好第读写U盘和连接HID键盘。& q" v. c( a# L# {2 H/ r7 T) n
程序代码的核心是V2.1的库。
/ n9 o, r% G: q* V8 G通过U盘D读写,可以方便地进行IAP-BOOT操作。以及用户键盘操作!% T8 B( I/ S( o: o7 A7 y2 Z
收藏 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的合并开发

继续发图:1 X$ z' t' A, p6 z* |
电路很简单,占用F207的HS-usb:
mon51 回答时间:2014-4-1 10:53:18

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

回复第 3 楼 于2014-04-01 10:51:07发表:0 y  E* x8 C7 I$ D5 \1 ~1 R1 h
继续发图:" p% k- D/ \3 [
电路很简单,占用F207的HS-usb:
  W! Q* u% L6 Y, r$ k8 C. s3 Q 
( ?$ t2 v% ?; A
$ ]1 b! `* \2 n& d) L) _ 
USB.png
mon51 回答时间:2014-4-1 10:55:01

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

初始化端口程序:/ B5 y: r3 h! a  ]+ V
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev){
; g$ F* Y4 {2 S3 E+ Q  GPIO_InitTypeDef GPIO_InitStructure;. p/ @2 _8 d: y- N
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);$ L+ Q- K! N1 B' ~4 f/ F: R  e" f
  6 }8 |2 s5 f( v1 H; }( \4 N
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12  |   u( h$ g) l: E) m* j- q- v' ]
    GPIO_Pin_13 |9 l% Z1 D' p" {
      GPIO_Pin_14 | 0 ~) W* `1 ^$ |  X
        GPIO_Pin_15;
, C, V# T+ Z3 C$ W- ~' I  
7 W. e$ G. h! k8 {8 P& _# g. h, N  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  ]9 M4 R# n. Y0 R) }  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;1 Y- _7 F& a0 e$ B
  GPIO_Init(GPIOB, &GPIO_InitStructure);  $ O# x) w$ p( Y' m# i
  / X) T" ^' Q4 R. f. y0 _# |
  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_OTG2_FS) ;
# O* L$ a4 J1 n% B* x: n7 I/ V  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_FS) ;
8 [% S: A# r/ s# `0 v+ m7 S% |  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG2_FS) ;
$ t8 b- t, C& Y0 Q& U  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG2_FS) ;
1 w8 g, \; R  }4 d- ?        //---------------------------------------------------------------7 @2 H; P- j4 L' I4 [- t
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ;
: w1 J6 d7 P3 u/ d) W) J        //-----------------------------------------------------------------
9 Y6 `0 w8 B; e6 n) `        //Vbus_EN   根据实际电路修改!( w& V7 O" T* |3 |2 d
  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE , ENABLE) ;  3 w: V9 Z7 s* S4 O6 a- w
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;8 O8 p6 s5 D. D# s! R) f
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;8 g8 x* r/ }5 h5 G8 }4 [
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  a1 e; ?; U; k/ O: @5 i
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;  
4 ~. _2 D% o& s+ ?, C) c  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
6 @' p2 p! Q8 y& P9 `0 d  GPIO_Init(GPIOE, &GPIO_InitStructure);
8 b0 X. X1 a3 i. D         
; R% X7 a4 [4 g- l        GPIO_ResetBits(GPIOE, GPIO_Pin_0);
- w5 K5 R2 K1 q2 P/ |- d        //-------------------------------------------------------------------+ y) f2 D) Y' ?% `7 A
  USB_OTG_BSP_TimeInit();7 M! X- I; p4 V- ?/ }
        USB_OTG_BSP_mDelay(500);   //Delay is need for stabilising the Vbus Low 2 P( t8 w4 J; C& }
}
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原来的库函数定义文件头:
; K6 c9 Y$ t7 v9 R+ y  W9 z#ifndef USE_USB_OTG_HS: k% C! R* N4 R' A7 ?) |( L
#define USE_USB_OTG_HS
1 Q+ j) f6 d6 `6 D#endif /* USE_USB_OTG_HS */
# x' \0 F' ^/ g+ f. C" T& g& e9 a#ifndef USE_ULPI_PHY& z7 f' \9 i  \  K/ n
//#define USE_ULPI_PHY9 [4 e, T( y+ G& t1 A' r& r
#endif /* USE_ULPI_PHY */0 [" |* ^9 A( n
#ifndef USE_EMBEDDED_PHY
9 N6 g9 i: |/ r/ v#define USE_EMBEDDED_PHY8 L3 t, \' n2 E5 \6 u+ T
#endif /* USE_EMBEDDED_PHY */( D# v0 a( N! g: f, f: d
#ifdef USE_USB_OTG_HS ' G0 c# R9 G$ V' D$ c" J  b4 @
#define USB_OTG_HS_CORE
1 T( y4 j, J( h#endif6 G, A( y' K9 p' H2 K
/*******************************************************************************
7 A/ q  q1 m+ w# \# k*                     FIFO Size Configuration in Host mode
8 z+ Y4 n, A3 \( k4 X9 m8 u*  
( k7 e4 F0 M& E( L* _# {* @*  (i) Receive data FIFO size = (Largest Packet Size / 4) + 1 or , Q  x; L: d; x" N, K/ E
*                             2x (Largest Packet Size / 4) + 1,  If a 4 `. {" o( [6 ?2 r3 T
*                             high-bandwidth channel or multiple isochronous 2 I% y1 f8 i# p& W/ P% g
*                             channels are enabled5 f& b7 Z4 q2 h  W$ w8 b5 |
*
' M6 l5 f! O  o" I7 t1 h*  (ii) For the host nonperiodic Transmit FIFO is the largest maximum packet size ) g! _+ L  j7 S9 i- r# q& k8 }# {
*      for all supported nonperiodic OUT channels. Typically, a space
; z3 L6 f% O+ j) @% `*      corresponding to two Largest Packet Size is recommended.
! D) N4 ^; t/ p& v9 z*
( Z4 t% M' r) T5 p0 {*  (iii) The minimum amount of RAM required for Host periodic Transmit FIFO is + S. {2 y0 R) A
*        the largest maximum packet size for all supported periodic OUT channels.
  P( z$ V" ]% x1 i/ g5 Y*        If there is at least one High Bandwidth Isochronous OUT endpoint,
* q- B, E0 d$ F) F' Y1 N3 [*        then the space must be at least two times the maximum packet size for
, s7 F! ?, L) D*        that channel.
" w; t9 Y: ~/ f+ [' j4 ?8 @" ]2 r*******************************************************************************/
( }) i0 ?8 A( t/ R. Q$ B
5 A0 n+ D3 T3 f* `/****************** USB OTG HS CONFIGURATION **********************************/4 k; L7 l' T6 ?' S' u. l' K7 R
#ifdef USB_OTG_HS_CORE* p2 g8 I  @! r& g6 Q4 k! L
#define RX_FIFO_HS_SIZE                          5124 k  i8 }) S3 v
#define TXH_NP_HS_FIFOSIZ                        256
# |" p, s$ X$ @  L, F1 ?' ~. P! A( s #define TXH_P_HS_FIFOSIZ                         256
2 _2 B: j8 t2 g1 I6 I& i' S# t0 A// #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
0 Y) l  b' s8 ~  C. t9 m// #define USB_OTG_HS_SOF_OUTPUT_ENABLED3 ?0 L5 H4 m+ I5 p1 |1 S8 w
#ifdef USE_ULPI_PHY
" t. ?+ S1 r! _  #define USB_OTG_ULPI_PHY_ENABLED
; k0 }. ?; o8 b* g& r- G #endif
/ O' }: c- E$ P/ n) x1 [& ~ #ifdef USE_EMBEDDED_PHY) \9 p7 m" p8 L* n7 M1 w1 l/ h
   #define USB_OTG_EMBEDDED_PHY_ENABLED: ^0 b* H. _7 R' \( Q2 d
#endif; T3 A. C4 C8 D) l; G! Z; @# Y, A
#define USB_OTG_HS_INTERNAL_DMA_ENABLED- `2 p, x% d/ X
#define USB_OTG_EXTERNAL_VBUS_ENABLED
' W/ S1 v, V: O5 B8 }# | //#define USB_OTG_INTERNAL_VBUS_ENABLED
. M9 K% Z( Z" I2 t2 M. z$ j; a#endif
: ?! q9 D0 o2 e: X! J2 O& a. ?5 H/****************** USB OTG FS CONFIGURATION **********************************/, `" ^: g9 E" n' b) S4 w6 j/ f
#ifdef USB_OTG_FS_CORE2 n. M+ Z1 M1 L6 ]3 ?; T* s# j
#define RX_FIFO_FS_SIZE                          128
; V7 p9 s4 {, w' |: F+ c #define TXH_NP_FS_FIFOSIZ                         96; }: C" W* ]5 Y( z6 w& I
#define TXH_P_FS_FIFOSIZ                          96  v: ^4 E6 c- H3 Q  b! r
// #define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT4 T" U3 b1 Q7 d* g' Y
// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
# i' x$ d! `" [' a#endif
5 E4 K0 F, T- q+ D/ Y! S8 O/****************** USB OTG MODE CONFIGURATION ********************************/
. F9 b% o/ r- }/ r9 B#define USE_HOST_MODE
) g" L+ z$ p! t) A# y( F" R" y- c4 r//#define USE_DEVICE_MODE+ @# {3 j$ Q/ N
//#define USE_OTG_MODE' X9 F9 Z# [+ }( F  I, Z
#ifndef USB_OTG_FS_CORE
  O: o- F. ^- ^4 s: y; N3 h# b #ifndef USB_OTG_HS_CORE
9 x' \6 @3 ?# C: C0 Q1 `    #error  "USB_OTG_HS_CORE or USB_OTG_FS_CORE should be defined"# H: j* T- ?& }! E! Y8 a
#endif6 H9 |9 }( c2 e2 D2 u8 h" j9 n
#endif5 W; x; a) r- @( Q
#ifndef USE_DEVICE_MODE
! a2 ~' {: U5 f: r. z; I #ifndef USE_HOST_MODE
4 z% n* z$ {' [4 G. s    #error  "USE_DEVICE_MODE or USE_HOST_MODE should be defined"( s0 T* L2 B8 J# e- l/ }/ h
#endif3 W" J; e$ U% z" y9 w
#endif! {3 Q) s( [  w2 q/ X' _
#ifndef USE_USB_OTG_HS: z* @- K: [/ \
#ifndef USE_USB_OTG_FS
; s+ T1 o, `7 O" f8 r# H    #error  "USE_USB_OTG_HS or USE_USB_OTG_FS should be defined"8 e2 M* Q; c7 W2 e8 {5 v3 H* M
#endif" o5 y4 S7 J) G* @# F! j/ t
#else //USE_USB_OTG_HS( x& d; ?& w5 \  v9 t' z# J
#ifndef USE_ULPI_PHY, y/ t) \+ t' i- U; A/ D/ ^
  #ifndef USE_EMBEDDED_PHY7 w2 X$ F9 P  F7 `. Z
     #error  "USE_ULPI_PHY or USE_EMBEDDED_PHY should be defined": \/ ]7 u+ y* w9 P; B
  #endif
7 E9 A8 {: V( L- J3 { #endif9 K+ |! M! S" F5 `8 h$ i
#endif9 U' h3 m3 J) R, o  T
/****************** C Compilers dependant keywords ****************************/! n0 N5 N# `& E
/* In HS mode and when the DMA is used, all variables and data structures dealing, A+ n. r/ E* V8 i" ~
   with the DMA during the transaction process should be 4-bytes aligned */   
! q5 I8 E1 W  e5 }" Z#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
: c0 B& r. T1 w  #if defined   (__GNUC__)        /* GNU Compiler */* x+ ~$ J; b1 P
    #define __ALIGN_END    __attribute__ ((aligned (4)))  E8 E# [$ ]( r
    #define __ALIGN_BEGIN         ; _  h+ J6 F& f( n
  #else                           5 [! w5 \3 g# W. ?& v* u
    #define __ALIGN_END6 I9 H; k, ^4 u
    #if defined   (__CC_ARM)      /* ARM Compiler */! o- T6 t0 h/ h" A8 h3 R1 Z, d
      #define __ALIGN_BEGIN    __align(4)  
0 n* s7 e- L& V" N# l    #elif defined (__ICCARM__)    /* IAR Compiler */! ~7 r* P* [4 P
      #define __ALIGN_BEGIN
, o' {% m% j& ?0 X    #elif defined  (__TASKING__)  /* TASKING Compiler */
1 a6 D: p7 a( p- @+ Y& E      #define __ALIGN_BEGIN    __align(4) + F, v( p: k4 H. P
    #endif /* __CC_ARM */  
' v% l, }: n" f' J' Q. x  #endif /* __GNUC__ */ 1 P2 {4 p' \" V8 Y
#else
5 g/ B2 [/ E5 y  #define __ALIGN_BEGIN
8 L' `, F* x$ s$ G3 U% P+ o8 k  #define __ALIGN_END   
3 G' S( Y. T1 f#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */( R! n# h2 T" b% z
/* __packed keyword used to decrease the data type alignment to 1-byte */. r9 Q( X6 g$ H) H# h
#if defined (__CC_ARM)         /* ARM Compiler */
& L( p7 J8 l. G! }3 P# @  #define __packed    __packed
0 b! B, i* T% D  L2 f! C#elif defined (__ICCARM__)     /* IAR Compiler */" a! a7 Z' B( c* w( X8 B4 L# L
  #define __packed    __packed( ]3 }6 W! m$ a' R; q! W/ x! \2 q0 `
#elif defined   ( __GNUC__ )   /* GNU Compiler */                        
: L6 O) h- s! N4 L# ^" ?$ f6 ]  #define __packed    __attribute__ ((__packed__))1 l+ J, M+ G! m3 V9 W+ s
#elif defined   (__TASKING__)  /* TASKING Compiler */, k0 {3 ?2 O. @0 T% T
  #define __packed    __unaligned
4 r+ m" _8 j- h  [6 g4 Q#endif /* __CC_ARM */
mon51 回答时间:2014-4-1 10:59:15

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

主程序非常简单:(这里是用U盘iap—BOOT为例):7 Q# z' f) Z% v5 G% @
int main(void){/ ^; R: j: h4 G3 ~
   6 e, m" x( K; x3 S* g
  /*!< At this stage the microcontroller clock setting is already configured,
( r/ u; N, j# o. C; ~  this is done through SystemInit() function which is called from startup
; G! X5 T0 T0 K" S: M- K1 `+ U* |4 ^  file (startup_stm32fxxx_xx.s) before to branch to application main.
/ d8 C4 u; W. p; j: P6 P  To reconfigure the default setting of SystemInit() function, refer to
$ [* h: T+ ^3 w, M  system_stm32fxxx.c file
5 R& Z: G; W5 s$ v, l( d+ B  */  
# \& I: i$ z" w) A& \4 q! d  
5 w* P8 |# q0 N: a  /* Init Host Library */
8 a, |1 l- r0 E0 c  {" n8 X; }  USBH_Init(&USB_OTG_Core, * u( ]0 M( U8 l$ Y9 q  C5 b
            USB_OTG_HS_CORE_ID,5 l+ l) H+ D( @6 p, h" I+ R9 h7 d/ d9 U
            &USB_Host,) x- d1 K; W8 b3 k# y: s7 n" Z
            &USBH_MSC_cb, 6 @3 Z, F; ?0 i# @( `
            &USR_cb);
. ^6 z  E5 D9 J9 r. A6 ^5 X  + a( |, l* y: c& f4 ?0 Z9 H
  while (1){
9 m4 z8 g9 v: b) K9 u6 G    /* Host Task handler */3 K) J4 \& g, p; s
    USBH_Process(&USB_OTG_Core, &USB_Host);
% r  J/ [# h. _1 D, h                if(iapRun==0){
+ @7 P4 p, G& L& e) [; ?4 O! |                        IAP_URN_UserProgrammer();
" {. S( {5 o. G7 E! v8 p0 M                }0 i# S2 e; f  c  C2 K
  }
' ]% K3 f* ]0 P4 h4 @4 O$ K$ p}
mon51 回答时间:2014-4-1 11:01:59

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

由于HOST-MSC和HID的初始化全部相同,这里先不介绍,不同点是从枚举后分析数据协议开始,所以我们在这里添加设备识别代码,然后再根据不同的设备,做相应的事情,这里主要是MSC的处理和HID设备的处理,同样也可以添加其他的设备.- f0 y* J) f5 c" S8 b; Y
  case HOST_USR_INPUT:    - L; f4 }7 K( V# s) ^
    /*The function should return user response true to move to class state */% `' S. J6 o$ _4 q  @
          //修改:添加MSC-HID自动判别,然后再初始化CALSS-CB
" x" K" f) H; K" Z+ K; y0 D                if(JB_MSC_HID(phost,0)){ //0:判别MSC,1:判别HID
$ l4 }" \5 V# L! J4 p                        SetHOST_USB_MODE(0);, }, F6 ~0 P- _  o7 {: G. O
                        phost->class_cb=&USBH_MSC_cb;: H- d- R/ h( K  Q6 C7 [
                        if((phost->class_cb->Init(pdev, phost)) == USBH_OK){# }! e. f  e; n9 E( y
                                phost->gState  = HOST_CLASS_REQUEST;     ' V: j3 E/ \5 j1 u+ \$ E! m
                        }     - Z) t* k9 W+ s& a
                }else{
. C* I( C4 ]4 W. f                        if(JB_MSC_HID(phost,1)){ //0:判别MSC,1:判别HID
! y7 \2 N! h  \                                SetHOST_USB_MODE(1);
+ W5 G0 }! f' n9 o/ D% `6 B                                phost->class_cb=&HID_cb;
1 Z. s2 L, x7 ?3 f: F$ j- c% Q                                //phost->usr_cb=&USR_Callbacks;//???????. o1 u/ C, Q1 H" @$ ~( g, k
                                if((phost->class_cb->Init(pdev, phost)) == USBH_OK){
) V& |* R, C9 ^, c6 C! P( L2 z                                        phost->gState  = HOST_CLASS_REQUEST;     . T" ?$ l# z: {, a& R* S
                                }
- ]4 U  s" I. O8 g$ b                        }
0 P# a1 E6 Y+ \8 ^& t- R    }   5 t2 I9 x2 N% Y1 z
    break;
mon51 回答时间:2014-4-1 11:02:43

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

case HOST_ENUMERATION:     ) ^1 ]8 o1 w* y! R% ~5 Q: k
    /* Check for enumeration status */  
+ Z1 C; t  k: O, [2 T9 f7 d    if ( USBH_HandleEnum(pdev , phost) == USBH_OK){ * j- h' [/ z4 N2 S
      /* The function shall return USBH_OK when full enumeration is complete */1 ?, r% `, B7 Z4 ^" T1 }9 T% Z
      9 R$ f, F) c% V& B6 k
      /* user callback for end of device basic enumeration */) U( `. K+ ^- J! W2 I
      phost->usr_cb->EnumerationDone();
! e" V; j2 M2 Y3 l( }# [6 m      
) H$ V) }- Z( D, n3 P      phost->gState  = HOST_USR_INPUT;      z  d" b3 y$ k6 }2 S; y+ U' F7 h% ?+ Q& o
    }
* Z' ^  L8 H5 m& Q' @! J+ B    break;
mon51 回答时间:2014-4-1 11:03:56

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

这是判别代码:
& y4 z' M' r* E" ]. ~/ x6 p//修改:添加MSC-HID自动判别,然后再初始化CALSS-CB
1 w8 X: O& Q0 |  Y8 N* E' iunsigned char JB_MSC_HID(USBH_HOST *phost,unsigned char flag){//0:判别MSC,1:判别HID
2 Q& N  a5 i3 T  l5 E       
8 P  M" ]3 [2 \- q! Q- F if(flag==0){
( }' i- P( v  R* e; ?  M        if(phost->device_prop.Itf_Desc[0].bInterfaceClass == MSC_CLASS){/ i- S) ^5 u) X3 C, \0 w/ T/ P; F
                if(phost->device_prop.Itf_Desc[0].bInterfaceProtocol == MSC_PROTOCOL)        return 1;
3 [/ c0 d# u1 Z$ U2 _5 Z4 J         }9 s( G, A% E& ^' t1 ]  g9 g
}else{
9 o, Y3 i9 g2 E% J0 i  A5 X( J( z         if(phost->device_prop.Itf_Desc[0].bInterfaceSubClass  == HID_BOOT_CODE) return 1;
7 l' k* `' A4 C/ J8 I# } }
2 O, w, U1 Z9 n2 y& m return 0;7 N2 L. R: Z  E/ J% m! ?# I3 T
}
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盘的兼容性。
" J* I% L& ~$ j/ P/**! q( ^$ i" T# ~/ q- s& w/ g1 F& U$ p3 G
  * @brief  USBH_CtlReq
% ~6 w* q: Q# L' k0 [  *         USBH_CtlReq sends a control request and provide the status after . G' |  Q( C+ _; e& `6 _9 x# Y
  *            completion of the request# `1 k/ I; G. m  n5 ^! Y/ B3 Q
  * @param  pdev: Selected device. e* x( }" i: _" @7 j0 G
  * @param  req: Setup Request Structure
. ^1 O) U1 z6 r4 G0 g) k+ [! w& h  * @param  buff: data buffer address to store the response
# r3 `- T9 u$ F% H: u0 s/ `/ E; H  * @param  length: length of the response1 @3 n8 w0 S- t, J6 [2 y
  * @retval Status. S2 o; k3 d% O# P- j2 `, c
  */0 Z/ _1 Z/ v9 d" b% c0 [9 I
USBH_Status USBH_CtlReq     (USB_OTG_CORE_HANDLE *pdev,
: I0 Q: o2 z: u% Z. o                             USBH_HOST           *phost, 5 u$ E2 L  g% I9 a
                             uint8_t             *buff,$ ^6 s6 E* i/ E- K3 Q1 C5 Y
                             uint16_t            length)
- @  C1 Z' `: X3 \{% e) \; |% }( @4 b! b+ I
  USBH_Status status;
& e& F/ J+ q1 G0 a  d4 Q+ n  status = USBH_BUSY;
! P. P; @9 o, _( o3 d  1 l4 q2 B8 r) F
  switch (phost->RequestState)
* W9 T5 Q# ?/ E; C$ @  {  u7 o2 ]7 u' ~) q" ~
  case CMD_SEND:3 Z5 E  r4 Z+ f- T: U. f  Z6 E9 \
    /* Start a SETUP transfer */
! C$ e. u4 Q/ ^! s% Z  u+ n    USBH_SubmitSetupRequest(phost, buff, length);
: Y+ Q/ ~: z+ \  m8 q8 I- K    phost->RequestState = CMD_WAIT;
& O4 ]. Q# ~% o  c) Y    status = USBH_BUSY;
+ t  A8 X  B* C& d0 T- o/ Q7 z6 _# R    break;
( ?# S& D; O1 [$ H   
3 D- V- f5 Q! c  case CMD_WAIT:
9 n/ D$ V7 E, b: u  A/ ^& R                if(Get_HOST_USB_MODE()==0){ //--2014-3-30 添加2种模式判别!!!
$ M! @' C( j8 d* V* ]                        if  (status == URB_DONE){
" q, k9 Q3 X- n& U                                /* Commands successfully sent and Response Received  */       ) i) T- `+ Z& I' ^+ C2 l. L/ n
                                phost->RequestState = CMD_SEND;
3 N" p0 p, K% Q& |/ x0 \2 I' `) Z. K                                status = USBH_OK;1 u) x, i9 X! ^. ?
                        }& N! \/ \+ `' x
                        else if  (status == URB_ERROR){
6 U2 \2 g; F% q- H* N                                /* Failure Mode */
, p& m* Q0 U2 O/ H. U% H                                phost->RequestState = CMD_SEND;) y7 S6 f: k8 ~. i5 n  A1 Z5 X% O
                                status = USBH_FAIL;
" m3 f# A1 ^5 R$ }$ i( s                        }   
5 O% _- H4 p' V6 s  j8 M* K- @                         else if  (status == URB_STALL){
: K+ Z! U6 b1 ?8 P$ `                                /* Commands successfully sent and Response Received  */       ) V" s' G0 x' e. L9 {9 o  f
                                phost->RequestState = CMD_SEND;# d$ J% X3 N3 B, y; j
                                status = USBH_NOT_SUPPORTED;
1 L" N3 r4 [3 p! }                        }
7 R  K% H8 }3 _# z0 t+ _                }else{6 U9 i0 t0 B  L2 E4 ?, O6 B3 |4 M
                         if (phost->Control.state == CTRL_COMPLETE ){//HID 处理!!1 _/ d+ D! P0 Q2 T) Q
                                        // Commands successfully sent and Response Received      
9 @$ `6 K' m: w4 E" A7 B                                        phost->RequestState = CMD_SEND;
  ]$ {, a  h3 K0 k- |                                        phost->Control.state =CTRL_IDLE;  
4 [6 n( c9 {. _, i+ q                                        status = USBH_OK;      & \8 _0 L# e7 z# L* q) m- G: T
                                }
: {! }/ {* L3 Z, {; R8 J! d                                else if  (phost->Control.state == CTRL_ERROR)
4 C7 B& m1 I: x& J* D+ S                                {
+ L/ x( F  q' I- e                                        // Failure Mode
* b/ H6 P& e# v. t/ K! n                                        phost->RequestState = CMD_SEND;. R* ^, [) d0 @- o3 O8 ~+ p: Q
                                        status = USBH_FAIL;
6 @+ j8 K% v7 z4 `. D+ h* i                                }   
8 J5 Y/ p4 {9 m# X                                 else if  (phost->Control.state == CTRL_STALLED )7 Y: R9 W9 s) B9 s6 `% P( v
                                {
1 j* z5 Y, ]* h                                        // Commands successfully sent and Response Received         1 O5 e+ X! m# I
                                        phost->RequestState = CMD_SEND;
" T. t2 [+ G+ F6 q! f2 f3 Q- V                                        status = USBH_NOT_SUPPORTED;
" n# x1 Z$ H1 _" l9 ]                                }* n+ N5 }( x8 E0 ?( _; |  v
                }
5 a3 f2 p9 q: ~, z( y# S        break;
, x1 ^: Q6 v7 Q: P        //-------------------------------------
9 ]" j: y% U& j& P% v3 E6 }" c  default:
9 ]0 }5 J. {. f( S' O  p    break;
7 Q1 Z" t) e$ x. I4 V  }
* i6 y* v9 m! A5 `  return status;  L7 h) Y. v5 I
}
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 手机版