本帖最后由 redgragon 于 2019-2-3 17:13 编辑
最近小弟希望自己做一个USB键盘玩,参考了战舰板的触控鼠标和网上的一些帖子
站内的
关于 KEIL提供的JoystickMouse例程 转化为 USB虚拟键盘
以及CSDN上的
STM32 keyboard USB键盘功能的实现
现程序已经可以被电脑成功识别并成功发送'A','Caps'键(其他按键及组合按键等没有尝试)但仍有一些问题想要请教各位大神
1.例程提供的是JoystickMouse而网上提供的是HID_KeyBoard(类似名字)
如例程中有
[mw_shl_code=c,true]/* USB Standard Device Descriptor */
const uint8_t Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =
{
//省略此处代码
}
; /* Joystick_DeviceDescriptor */[/mw_shl_code]
网上参考有
[mw_shl_code=applescript,true]const uint8_t Keyboard_DeviceDescriptor[KEYBOARD_SIZ_DEVICE_DESC] =
{
//省略此处代码
}[/mw_shl_code]
以上两个函数从格式和功能完全一致只是名字不同,想知道这个名字是固定的还是可以自行修改的?修改后是否需要到usb_prop.c中替换注册?
2.关于端点(endpoint)的问题
鼠标只需要一个端点用于上传,键盘需要两个,一个用于上传另一个是用于干什么的?
如果只保留像鼠标那样的一个端点会发生什么问题?
3.每次USB发送后使用SetEPTxValid(ENDP1);这句话的意思是什么?
4.在usb_conf.h中有如下定义
[mw_shl_code=c,true]/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x18)
#define ENDP0_TXADDR (0x58)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0x100)[/mw_shl_code]
这是两个端点的缓存地址吗?
键盘另外需要#define ENDP1_RXADDR,这个地方给多少会比较好
上面ENDP0的两个地址又是怎么确定的?
5.4中所定义的
[mw_shl_code=c,true]/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x18)
#define ENDP0_TXADDR (0x58)[/mw_shl_code]
两个地址间的差值为0x40,而在usb_desc.h中的Joystick_DeviceDescriptor中有如下定义
[mw_shl_code=c,true]/* USB Standard Device Descriptor */
const uint8_t Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =
{
0x12, /*bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
0x00, /*bcdUSB */
0x02,
0x00, /*bDeviceClass*/
0x00, /*bDeviceSubClass*/
0x00, /*bDeviceProtocol*/
0x08, /*bMaxPacketSize 8*/ //此处原定义为0x40
0x83, /*idVendor (0x0483)*/
0x04,
0x11, /*idProduct = 0x5711*/
0x57,
0x00, /*bcdDevice rel. 2.00*/
0x02,
1, /*Index of string descriptor describing
manufacturer */
2, /*Index of string descriptor describing
product*/
3, /*Index of string descriptor describing the
device serial number */
0x01 /*bNumConfigurations*/
}
; /* Joystick_DeviceDescriptor */[/mw_shl_code]
以上代码用//注释的地方原来是0x40,不知道和ENDP0_RXADDR与ENDP0_TXADDR之间的0x40有没有必然联系?如果我把Joystick_DeviceDescriptor定义为0x08,上面缓冲区大小能不能或者该不该相应减小?
6.接以上4.5,附图请问这个图该如何理解?
一周热门 更多>