電子工程網
標題: 一個基于STM32 HID例程生成不多于64字節傳輸的示范 [打印本頁]
作者: 小融一號 時間: 2016-9-8 16:35
標題: 一個基于STM32 HID例程生成不多于64字節傳輸的示范
前言
本文簡單介紹如何應用ST USB HID(MOUSE)例程生成一個可以輸入和輸出任何長度小于等于64字節的移植過程。
問題描述:
HID的在USB的運用中是非常廣泛的,但是很多應用并不是簡單的鼠標或者鍵盤操作,而是客戶自定義的一些應用,所以REPORT的定義往往跟鼠標或者鍵盤并不相同,因而客戶常常基于ST的HID的例程進行修改。那么如何基于我們的例程生成一個可以輸入輸出任何長度小于等于64字節的例程?這里示范一下,拋磚引玉。
代碼修改:
第一步:
我們在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 的設定。
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的使能,以及準備接收數據。
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;
}
第四步:
修改發送函數,注意不能一直往USB FIFO里面填充數據,一定要等上一次傳輸完成再填充。
USBD_HID_SendReport(&USB_Device_dev, Send_Buffer,HID_IN_PACKET);
最后我們一起來看看效果,可以清楚的看到MCU每毫秒都會發送64個字節的數據到主機。
結論:
這個例程只是基于STM32F0系列的MCU進行的修改,你只要按照這四步很容易地移植到其它系列MCU上。
文章來源:微信公眾號 融創芯城
歡迎光臨 電子工程網 (http://m.qingdxww.cn/) |
Powered by Discuz! X3.4 |
主站蜘蛛池模板:
四虎影视网站
|
欧美一区二区三区在线可观看
|
免费一级做a爰片性色毛片
免费一级做a爰片久久毛片潮
|
日韩第四页
|
成人综合影院
|
日韩在线观看免费完整版视频
|
欧美成人午夜在线全部免费
|
精品久久久久久中文字幕2017
|
国内一卡2卡三卡四卡在线
国内一级一级毛片a免费
|
男人天堂网2020
|
免费99视频
|
日韩在线免费看网站
|
久久国产亚洲欧美日韩精品
|
在线欧美精品国产综合五月
|
99综合在线
|
日韩高清一区二区
|
国产在线一区二区三区欧美
|
国产精品国产三级国产a
|
国产精品伦理一二三区伦理
|
岛国免费大片
|
成人免费在线视频网站
|
天天噜噜日日噜噜久久综合网
|
国产乱码精品一区二区三上
|
成年看片免费高清观看
|
免费高清毛片
|
日本在线观看不卡
|
四虎永久在线精品影院
|
亚洲香蕉在线视频
|
一级全黄毛片
|
日韩欧美亚洲一区精选
|
yy111111影院理论大片
|
欧美黑人巨大性极品hd欧
|
日本不卡在线视频
|
精品视频在线免费播放
|
九九九九九九精品免费
|
国产精品夜间视频香蕉
|
91麻豆最新在线人成免费观看
|
一级成人a毛片免费播放
|
精品视频一区二区三三区四区
|
日韩在线播放中文字幕
|
欧美视频在线播放
|