娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月12日(星期四)

2019年06月12日 | stm32 usb hid 移植時(shí)出現(xiàn)的問題及解決辦法

發(fā)布者:老衛(wèi) 來源: eefocus關(guān)鍵字:stm32  usb  hid  移植 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

由于項(xiàng)目需要,使用了stm32f107的芯片,移植了STM32_USB-Host-Device_Lib_V2.2.0 官方usb固件庫,在UCOSII上運(yùn)行,剛開始使用的是STM32_USB-FS-Device_Lib_V2.3.0的庫,這個庫網(wǎng)上資源較多,但是在使用的時(shí)候發(fā)現(xiàn)這個庫和UCOSII的延時(shí)函數(shù)有沖突,導(dǎo)致ucos操作系統(tǒng)不能正常運(yùn)行,經(jīng)過調(diào)試沒有發(fā)現(xiàn)原因,調(diào)試期間在st官網(wǎng)找到了最新的固件庫STM32_USB-Host-Device_Lib_V2.2.0,于是移植過來使用,發(fā)現(xiàn)UCOS操作系統(tǒng)正常運(yùn)行,官方提供的例程使用了端點(diǎn)1作為數(shù)據(jù)輸入輸出,我想改成端點(diǎn)1輸入,端點(diǎn)2輸出,通過查看 官網(wǎng)的庫用戶文檔CD00289278.pdf找到了修改方法,因?yàn)槲沂鞘褂玫?customhid的例程,所以以下的修改適用于customhid例程,修改注意這些文件


usbd_conf.h  , usb_conf.h , usbd_customhid_core.c


其中 usbd_conf.h  修改 如下宏定義


#define HID_IN_EP                    0x81        設(shè)備->主機(jī)    0x8x       表示IN端點(diǎn)x

#define HID_OUT_EP                0x02        主機(jī)->設(shè)備    0x0x       表示OUT端點(diǎn)x  


#define HID_IN_PACKET                64       IN包長度

#define HID_OUT_PACKET            64       OUT包長度


usb_conf.h  修改   如下宏定義


 #define RX_FIFO_FS_SIZE                          128       接收FIFO長度

 #define TX0_FIFO_FS_SIZE                          64       發(fā)送端點(diǎn)0FIFO長度

 #define TX1_FIFO_FS_SIZE                          64       發(fā)送端點(diǎn)1FIFO長度

 #define TX2_FIFO_FS_SIZE                          64       發(fā)送端點(diǎn)2FIFO長度

 #define TX3_FIFO_FS_SIZE                          64       發(fā)送端點(diǎn)3FIFO長度


usbd_customhid_core.c修改


1:修改配置描述符,如果要實(shí)現(xiàn)自定義雙向通信還要修改報(bào)告描述符(參考了圈圈的書)


下面是我實(shí)現(xiàn)雙向通信的配置描述符和報(bào)告描述符


配置描述符:


__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgDesc[USB_CUSTOM_HID_CONFIG_DESC_SIZ] __ALIGN_END =

{

  0x09, /* bLength: Configuration Descriptor size */

  USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */

  USB_CUSTOM_HID_CONFIG_DESC_SIZ,

  /* wTotalLength: Bytes returned */

  0x00,

  0x01,         /*bNumInterfaces: 1 interface*/

  0x01,         /*bConfigurationValue: Configuration value*/

  0x00,         /*iConfiguration: Index of string descriptor describing

  the configuration*/

  0xC0,         /*bmAttributes: bus powered and Support Remote Wake-up */

  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/

  

  /************** Descriptor of Custom HID interface ****************/

  /* 09 */

  0x09,         /*bLength: Interface Descriptor size*/

  USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/

  0x00,         /*bInterfaceNumber: Number of Interface*/

  0x00,         /*bAlternateSetting: Alternate setting*/

  0x02,         /*bNumEndpoints*/

  0x03,         /*bInterfaceClass: HID*/

  0x00,         /*bInterfaceSubClass : 1=BOOT, 0=no boot*/

  0x00,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/

  0,            /*iInterface: Index of string descriptor*/

  /******************** Descriptor of Custom HID ********************/

  /* 18 */

  0x09,         /*bLength: HID Descriptor size*/

  CUSTOM_HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/

  0x11,         /*bcdHID: HID Class Spec release number*/

  0x01,

  0x00,         /*bCountryCode: Hardware target country*/

  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/

  0x22,         /*bDescriptorType*/

  USBD_CUSTOM_HID_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/

  0x00,

  /******************** Descriptor of Custom HID endpoints ***********/

  /* 27 */

  0x07,          /* bLength: Endpoint Descriptor size */

  USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

  

  HID_IN_EP,     /* bEndpointAddress: Endpoint Address (IN) */

  0x03,          /* bmAttributes: Interrupt endpoint */

  HID_IN_PACKET, /* wMaxPacketSize: 64 Bytes max */

  0x00,

  0x01,          /* bInterval: Polling Interval (32 ms) */

  /* 34 */

  

  0x07,             /* bLength: Endpoint Descriptor size */

  USB_ENDPOINT_DESCRIPTOR_TYPE,    /* bDescriptorType: */

  /*    Endpoint descriptor type */

  HID_OUT_EP,    /* bEndpointAddress: */

  /*    Endpoint Address (OUT) */

  0x03,    /* bmAttributes: Interrupt endpoint */

  HID_OUT_PACKET,    /* wMaxPacketSize: 64 Bytes max  */

  0x00,

  0x01,    /* bInterval: Polling Interval (20 ms) */

  /* 41 */

} ;


報(bào)告描述符:


static uint8_t CustomHID_ReportDesc[USBD_CUSTOM_HID_REPORT_DESC_SIZE] =

  {   

            0x06,0x00,0xff,/* USAGE_PAGE  */

        0x05, 0x8c, /* USAGE_PAGE (ST Page) */


        0x09, 0x01, /* USAGE (Demo Kit) */


        0xa1, 0x01, /* COLLECTION (Application) */


         


        // The Input report


        0x09,0x03, // USAGE ID - Vendor defined


        0x15,0x00, // LOGICAL_MINIMUM (0)


        0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)


        0x75,0x08, // REPORT_SIZE (8bit)


        0x95,0x40, // REPORT_COUNT (64Byte)


        0x81,0x02, // INPUT (Data,Var,Abs)


 


        // The Output report


        0x09,0x04, // USAGE ID - Vendor defined


        0x15,0x00, // LOGICAL_MINIMUM (0)


        0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)


        0x75,0x08, // REPORT_SIZE (8bit)


        0x95,0x40, // REPORT_COUNT (64Byte)


        0x91,0x02, // OUTPUT (Data,Var,Abs)


 


         0xc0 /* END_COLLECTION */

  }; /* CustomHID_ReportDescriptor */

 


2:修改端點(diǎn)初始化函數(shù):


static uint8_t  USBD_CUSTOM_HID_Init (void  *pdev, 

                               uint8_t cfgidx)

{

  /* Open EP IN */

  DCD_EP_Open(pdev,

              HID_IN_EP,

              HID_IN_PACKET,

              USB_OTG_EP_INT);

  

  /* Open EP OUT */

  DCD_EP_Open(pdev,

              HID_OUT_EP,

              HID_OUT_PACKET,

              USB_OTG_EP_INT);

  

  return USBD_OK;

}


static uint8_t  USBD_CUSTOM_HID_DeInit (void  *pdev, 

                                 uint8_t cfgidx)

{

  /* Close HID EPs */

  DCD_EP_Close (pdev , HID_IN_EP);

  DCD_EP_Close (pdev , HID_OUT_EP);

  

  

  return USBD_OK;

}


完成了上面的修改,下一步就是如何接收數(shù)據(jù)和發(fā)送數(shù)據(jù):


發(fā)送數(shù)據(jù)使用


uint8_t USBD_CUSTOM_HID_SendReport     (USB_OTG_CORE_HANDLE  *pdev, 

                                 uint8_t *report,

                                 uint16_t len)

{

  if (pdev->dev.device_status == USB_OTG_CONFIGURED )

  {

    DCD_EP_Tx (pdev, HID_IN_EP, report, len);

  }

  return USBD_OK;

}

函數(shù),這里有個要注意的地方就是在usbd_customhid_core.c中有一個發(fā)送中斷回調(diào)函數(shù),如果想把IN端口改為其他的端點(diǎn),需要將if (epnum == 1) PrevXferDone = 1中的epnum修改為對應(yīng)的端點(diǎn),否則會發(fā)送不出去數(shù)據(jù),回調(diào)函數(shù)原型如下


static uint8_t  USBD_CUSTOM_HID_DataIn (void  *pdev, 

                              uint8_t epnum)

{

      

  /* Ensure that the FIFO is empty before a new transfer, this condition could 

  be caused by  a new transfer before the end of the previous transfer */

  DCD_EP_Flush(pdev, HID_IN_EP);

  

  if (epnum == 1) PrevXferDone = 1;

  

  return USBD_OK;

}


接收數(shù)據(jù)使用如下回調(diào)函數(shù)


uint8_t  USBD_CUSTOM_HID_DataOut (void  *pdev, 

                                  uint8_t epnum)

{

  return USBD_OK;

}

調(diào)用 uint32_t   DCD_EP_PrepareRx( USB_OTG_CORE_HANDLE *pdev,

                            uint8_t   ep_addr,

                            uint8_t *pbuf,                        

                            uint16_t  buf_len) 函數(shù);



關(guān)鍵字:stm32  usb  hid  移植 引用地址:stm32 usb hid 移植時(shí)出現(xiàn)的問題及解決辦法

上一篇:USB Device應(yīng)用筆記(基于STM32F103)
下一篇:STM32F103系列USB的學(xué)習(xí)過程及使用心得(一)(概括篇)

推薦閱讀

var videoObject = { container: '.video', variable: 'player', autoplay:true, html5m3u8:true, video:'http://media.elecfans.com/topic/gongkaike/2018/05/393c3780-5f20-11e8-b07b-408d5c8db401/1/hls/index.m3u8' }; if (!!window.ActiveXObject) { videoObject.html5m3u8 = false } var player=new ckplayer(videoObject);
Silicon Labs(亦稱“芯科科技”,NASDAQ:SLAB)宣布其8位及32位微處理器(MCU)再獲創(chuàng)新的智能設(shè)備和云服務(wù)提供商及小米生態(tài)成員企業(yè)云丁科技選用,被應(yīng)用于該公司最新的智能鎖系列產(chǎn)品之中。兩家物聯(lián)網(wǎng)(IoT)公司一直攜手為中國的公寓管理及家用市場開發(fā)智能鎖產(chǎn)品。此外,Silicon Labs、云丁科技及多家領(lǐng)先公司亦宣布共建智能鎖安全實(shí)驗(yàn)室,將進(jìn)一...
一.S3C2440中的UART介紹UART(universal asynchronous receive transmitter)通用異步收發(fā)器,用來收發(fā)串行數(shù)據(jù),以全雙工的形式進(jìn)行通信,UART使用的電平標(biāo)準(zhǔn)是TTL/CMOS,一幀數(shù)據(jù)通常包含開始位、數(shù)據(jù)位、校驗(yàn)位、停止位,UART傳輸?shù)碾p方要統(tǒng)一波特率。S3C2440中有三個UART獨(dú)立通道,功能類似,下面分塊介紹一下UART比較重要的部分。UART的用途一般有...
6月11日,據(jù)上交所科創(chuàng)板上市委2021年第36次審議會議結(jié)果顯示,炬芯科技股份有限公司(簡稱“炬芯科技”)科創(chuàng)板IPO成功過會。招股書顯示,炬芯科技是中國領(lǐng)先的低功耗系統(tǒng)級芯片設(shè)計(jì)廠商,主營業(yè)務(wù)為中高端智能音頻SoC芯片的研發(fā)、設(shè)計(jì)及銷售,專注于為無線音頻、智能穿戴及智能交互等智慧物聯(lián)網(wǎng)領(lǐng)域提供專業(yè)集成芯片。炬芯科技的主要產(chǎn)品為藍(lán)牙音頻SoC芯...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 祁连县| 三明市| 米泉市| 新安县| 莱西市| 汉沽区| 庄河市| 武威市| 孝义市| 玛沁县| 尼木县| 靖江市| 万安县| 安丘市| 衡南县| 潮州市| 西林县| 汨罗市| 寿宁县| 淮南市| 双鸭山市| 莆田市| 安阳县| 宜兴市| 天津市| 兴仁县| 博白县| 双鸭山市| 永定县| 和龙市| 宿州市| 平阳县| 武乡县| 札达县| 宜州市| 手游| 玛沁县| 广饶县| 海晏县| 宁阳县| 阳原县|