USB HID?
发布: 2009-6-09 19:10 | 作者: kk_9951 | 来源: StmFans思蜕盟 OPELC 自由电子联盟
STM32 usb 与 PC 端 usb 可以传数据,但一次只能传 2byte.
不知如何解决??
使用 ST 提供的 STM32_USB-FS-Device_Lib_V3.0.1 -> Custom_HID
不知如何解决??
使用 ST 提供的 STM32_USB-FS-Device_Lib_V3.0.1 -> Custom_HID
src.rar
(2009-06-09 19:10:41, Size: 15.4 KB, Downloads: 9)

usb_prop.c
void CustomHID_Reset(void)
{
:
:
:
SetEPType(ENDP1, EP_INTERRUPT);
SetEPTxAddr(ENDP1, ENDP1_TXADDR);
SetEPRxAddr(ENDP1, ENDP1_RXADDR);
SetEPTxCount(ENDP1, 8);
SetEPRxCount(ENDP1, 8);
SetEPRxStatus(ENDP1, EP_RX_VALID);
SetEPTxStatus(ENDP1, EP_TX_NAK);
}
使用
UserToPMABufferCopy(Dat, ENDP1_TXADDR, 8);
SetEPTxCount(ENDP1, 8);
SetEPTxValid(ENDP1);
丟不出來?
還有什麼地方沒修改到...
(2009-06-11 13:42:49, Size: 2.51 KB, Downloads: 6)
看了你的报告表述符,描述的是2个字节呀!第一个是报告ID,第二个是LED状态吧!
小弟看不太懂,所以不知如何修改,同上修改一些地方,还是有问题,大大可否协助指导?
谢谢
实际上你最大字节为8,只能传送7个字节的有效数据,第一个字节是REPORT ID
还有,不知道你要做成什么样子的设备,希望你能说明一下,加我QQ:3548850
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_0483&Pid_5750
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\Vid_0483&Pid_5750
把以上这两个键删除,再试试!附件是我改过的描述符!
(2009-06-11 18:17:13, Size: 2.52 KB, Downloads: 14)
小弟想要修改成 不要ID 只要传收 513 byte , 目前修改您的描述符,可以到256byte 再上去会造成PC 死机 .
可否请您协助如何描述符 可以传收513 byte(不加ID) ?
谢谢
usb_prop.c
void CustomHID_Reset(void)
{
:
:
:
SetEPType(ENDP1, EP_INTERRUPT);
SetEPTxAddr(ENDP1, ENDP1_TXADDR);
SetEPRxAddr(ENDP1, ENDP1_RXADDR);
SetEPTxCount(ENDP1, 513);
SetEPRxCount(ENDP1, 513);
SetEPRxStatus(ENDP1, EP_RX_VALID);
SetEPTxStatus(ENDP1, EP_TX_NAK);
}
另外在设备管理器中会显示 USB 人性化接口装置及HID-compliant device ,
可以改显示指定名称吗?
另外在设备管理器中会显示 USB 人性化接口装置及HID-compliant device ,
可以改显示指定名称吗?
0x09, 0x00, // USAGE (Undefined)
0xA1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0xFF, // REPORT_COUNT (17)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x02, // USAGE (Vendor Usage 2)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0xFF, // REPORT_COUNT (17)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0xC0 // END_COLLECTION
void EP1_OUT_Callback(void)
{
DataLen = GetEPRxCount(ENDP1);
PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR, DataLen);
SetEPRxValid(ENDP1);
}
DataLen = 255
Receive_Buffer 收到的资料与PC传来的位移1byte
PC[0]=0 , PC[1]=1, PC[2]=2 …. 结果 Receive_Buffer[0] = 1, Receive_Buffer[1] =2, Receive_Buffer[2] = 3 …
关于 0x95, 0xFF // REPORT_COUNT , 要如何大于255 ?
(2009-06-12 17:17:13, Size: 43.9 KB, Downloads: 26)
(2009-06-13 08:19:52, Size: 805 KB, Downloads: 30)
在STM32 接收到的資料 Receive_Buffer[0]~[251] = 0x01~0xFC , Receive_Buffer[252]~[511] 不對.
DataLen = GetEPRxCount(ENDP1);
PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR, DataLen);
SetEPRxValid(ENDP1);
test1.JPG
test2.JPG
0x06, 0xa0, 0xff, /*usage page (generic desktop) */
0x09, 0x00, /*usage undefined */
0xa1, 0x01, /*collection (application) */
0x09, 0x01, /*usage undefined */
0x15, 0x00, /*logical minimum(0) */
0x25, 0xff, /*logical maximum(ffh) */
0x35, 0x00, /*physical minimum 0 */
0x45, 0xff, /*physical maximum ff(-1d) */
0x75, 0x08, /*report size 8 */
0x95, 0x80, /*report count 1 */
0x81, 0x02, /*input(variable) */
0x09, 0x02, /*usage undefined */
0x15, 0x00, /*logical minimum 0 */
0x25, 0xff, /*logical maximum ffh */
0x35, 0x00, /*physical minimum 0 */
0x45, 0xff, /*physical maximum ffh/-1d */
0x75, 0x08, /*report size 8 */
0x95, 0x80, /*report count 1 */
0x91, 0x02, /*output (variable) */
0xc0
如果在报告描述符将report count 设置为128,那么每次传输时如果数据不满128个,是不是USB 控制器补足128个再发送?
如果在要传输的一包数据大于128个,是不是要采用report id 做标记,由pc 端程序解析?
谢谢