国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 4221|回復(fù): 0
打印 上一主題 下一主題

一個基于STM32 HID例程生成不多于64字節(jié)傳輸?shù)氖痉?/span>

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2016-9-8 16:35:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: STM32 , 融創(chuàng)芯城
前言
本文簡單介紹如何應(yīng)用ST USB HID(MOUSE)例程生成一個可以輸入和輸出任何長度小于等于64字節(jié)的移植過程。

問題描述:
HID的在USB的運用中是非常廣泛的,但是很多應(yīng)用并不是簡單的鼠標或者鍵盤操作,而是客戶自定義的一些應(yīng)用,所以REPORT的定義往往跟鼠標或者鍵盤并不相同,因而客戶常;赟T的HID的例程進行修改。那么如何基于我們的例程生成一個可以輸入輸出任何長度小于等于64字節(jié)的例程?這里示范一下,拋磚引玉。

代碼修改:
第一步:
我們在usbd_hid_core.c中,找到配置描述進行修改。首先增加一個OUT 端點。同時將HID_IN_PACKET 和HID_OUT_PACKET長度修改為0x40。

0x07, /* bLength: Endpoint Descriptorsize *///dum
USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType: */ /* Endpoint descriptor type */
HID_OUT_EP, /* bEndpointAddress: */ /*Endpoint Address (OUT) */
0x03, /* bmAttributes: Interruptendpoint */
HID_OUT_PACKET, /* wMaxPacketSize: 64Bytes max */
0x00,
0x01, /* bInterval: Polling Interval(20 ms) */
/* 41 */

第二步:
修改報告描述符:請注意這兩個report count 和report SIZE 的設(shè)定。
const uint8_tHID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] =
{
0x05, 0x8C, /* USAGE_PAGE (VendorPage: 0xFF00) */
0x09, 0x06, /* USAGE (Demo Kit) */
0xa1, 0x01, /* COLLECTION(Application) */
/* 6 */
0x09, 0x06, /* USAGE (LED 1) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x26, 0x00,0xff, /* LOGICAL_MAXIMUM(1) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x95, 0x40, /* REPORT_COUNT (64) */
0x91, 0x82, /* OUTPUT(Data,Var,Abs,Vol) */
/* 18 */
0x09, 0x06, /* USAGE (ADC IN) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x26, 0x00,0xff, /* LOGICAL_MAXIMUM(255) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x95, 0X40, /* REPORT_COUNT (64) */
0x81, 0x82, /* INPUT(Data,Var,Abs,Vol) */
/* 31 */
0xc0 /* END_COLLECTION */
}; /* CustomHID_ReportDescriptor */

第三步:
修改HID CLASS 初始化代碼:
注意這里兩個地方:
1, USB FIFO的分配定義。
2, Usb ENDPOINT的使能,以及準備接收數(shù)據(jù)。
static uint8_t USBD_HID_Init (void*pdev,
uint8_t cfgidx)
{
DCD_PMA_Config(pdev ,HID_IN_EP,USB_SNG_BUF,HID_IN_TX_ADDRESS);
DCD_PMA_Config(pdev ,HID_OUT_EP,USB_SNG_BUF,HID_OUT_RX_ADDRESS);
/* Open EP IN */
DCD_EP_Open(pdev,
HID_IN_EP,
HID_IN_PACKET,
USB_EP_INT);
/* Open EP OUT */
DCD_EP_Open(pdev,
HID_OUT_EP,
HID_OUT_PACKET,
USB_EP_INT);
DCD_EP_PrepareRx(pdev,HID_OUT_EP,Report_buf,HID_OUT_PACKET);
PrevXferDone=1;
return USBD_OK;
}

第四步:
修改發(fā)送函數(shù),注意不能一直往USB FIFO里面填充數(shù)據(jù),一定要等上一次傳輸完成再填充。
USBD_HID_SendReport(&USB_Device_dev, Send_Buffer,HID_IN_PACKET);
最后我們一起來看看效果,可以清楚的看到MCU每毫秒都會發(fā)送64個字節(jié)的數(shù)據(jù)到主機。
結(jié)論:
這個例程只是基于STM32F0系列的MCU進行的修改,你只要按照這四步很容易地移植到其它系列MCU上。


文章來源:微信公眾號  融創(chuàng)芯城

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩毛片在线观看 | 久久国产精品999 | 成人精品在线观看 | 日韩视频在线观看免费 | 上海麻豆文化传媒网站入口 | 亚洲狠狠ady亚洲精品大秀 | 亚洲欧美成人综合 | 日本亚洲一区二区 | 久久青青热 | 一级毛片特级毛片免费的 | 国产精品毛片一区二区三区 | 国产羞羞的视频在线观看免费 | 亚洲精品在线视频观看 | 日本在线看免费 | 黄色高清视频在线观看 | 欧美自拍区 | 91免费国产在线观看 | 幻女free性zozo爱 | 男女网站在线观看 | 亚洲欧美日本在线 | 久久h视频| 中文字幕欧美在线观看 | 久久久久这里只有精品 | 99精品这里只有精品高清视频 | 香蕉视频破解版 | 明星换脸高清一区二区 | 国产中文字幕免费观看 | 香蕉精品在线 | 99热最新| 日韩欧美精品在线观看 | 欧美日本在线一区二区三区 | 免费日本高清 | 亚洲一区在线视频观看 | 国产欧美日韩精品专区 | 手机看片一区 | 国产精品1024香蕉在线观看 | 草网站| 色综合久久综精品 | 有毛片毛毛片毛片毛片 | 亚洲国产精品91 | 亚洲欧洲精品成人久久曰 |