[原创] 【M4开发板Hanker试用狂-Shower.Xu】8、免驱才简单-实现接入PC的USB HID鼠标设备

shower.xu   2012-6-7 10:16 楼主
好不容易刚搞定,中间状况频出,一波三折啊...
这里上程序,图片,视频和工具资料,及移植步骤注意点

调试了用附件那个调试工具,很方便,用法网上搜。
几点注意的地方:
1、用Keil的.S启动文件堆栈记得改大点
;******************************************************************************
;
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
;******************************************************************************
Stack   EQU     0x00000400

2、记得加usb的中断向量

        DCD     USB0DeviceIntHandler           ; USB0

3、C:\StellarisWare\usblib\device里的文件最好拷贝出来到项目里调用,
应为要添加一些头文件包含,进行修改。

4、加入usb库和一些必要的头文件,完善他们的包含关系
这个参照附件里的usb库使用指导。

5、添加设备描述符等信息
请参照附件指导书和这两篇文章,很详细,感谢作者

【力荐!!!】Triton.zhang Stellaris学习笔记汇总

LM3S USB设备开发学习集锦(很详细)~~~~

6、加入鼠标设备实例和回调函数
//*****************************************************************************
//
// The HID mouse device initialization and customization structures.
// Application never assess this
//*****************************************************************************
tHIDMouseInstance g_sMouseInstance;

const tUSBDHIDMouseDevice g_sMouseDevice =
{
    USB_VID_STELLARIS,
    USB_PID_MOUSE,
    500,
    USB_CONF_ATTR_SELF_PWR,
    MouseHandler,
    (void *)&g_sMouseDevice,
    g_pStringDescriptors,
    NUM_STRING_DESCRIPTORS,
    &g_sMouseInstance
};

//*****************************************************************************
//
// This is the callback from the USB device HID mouse class driver.
//
// \param pvCBData is ignored by this function.
// \param ulEvent is one of the valid events for a mouse device.
// \param ulMsgParam is defined by the event that occurs.
// \param pvMsgData is a pointer to data that is defined by the event that
// occurs.
//
// This function will be called to inform the application when a change occurs
// during operation as a HID class USB mouse device.
//
// \return This function will return 0.
//
//*****************************************************************************
unsigned long
MouseHandler(void *pvCBData, unsigned long ulEvent,
             unsigned long ulMsgData, void *pvMsgData)
7、加入usb模块使能及端口设置
/****************************************************************************************
** File Name  :uart_init                                                              **
** Description:       **
** Arguments  :                                                                        **
** Output     :                                                                        **
** Return     :                                                                        **
=========================================================================================
** Author  : Triton_Zhang smartztn@163.com                                             **
** Version :                                                                           **
** History :                                                                           **
****************************************************************************************/
void usb_init(void)
{
    // Configure the required pins for USB operation.
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
    ROM_GPIOPinTypeUSBAnalog(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    ROM_GPIOPinTypeUSBAnalog(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);

if (CLASS_IS_BLIZZARD && REVISION_IS_A1)
    {
        HWREG(GPIO_PORTB_BASE + GPIO_O_PDR) |= GPIO_PIN_1;
    }

// Not configured initially.
    g_bUSBConfigured = false;
}
感谢 Triton_Zhang的代码

8、主函数里初始化设备
//初始化端口
usb_init();
//设置为从设备类型
  USBStackModeSet(0, USB_MODE_DEVICE, 0);
//鼠标实例初始化
if(USBDHIDMouseInit(0,&g_sMouseDevice)!= 0)
lcd_ili932x_ShowString(10,30+20*0,"USB init done.",0);

9、传输坐标数据到PC
USBDHIDMouseStateChange((void *)&g_sMouseDevice,
                           (char)(0), (char)(0),
                            0);
第一个参数为设备实例名,后面三个分别为x偏移值,y偏移值,按键值
具体请参考鼠标数据格式

基本就这些了,我也只是知道个步骤,如果想深入了解,请查阅资料

感谢anananjjj的帮助和若锡老大的指导...

视频在这里
[media]http://www.tudou.com/v/9FhybOanWRU/&rpid=100900070&resourceId=100900070_04_05_99/v.swf[/media]
[ 本帖最后由 shower.xu 于 2012-6-7 10:37 编辑 ]
  • 枚举失败画面,留做纪念
  • 枚举成功
  • 查看描述,但不知为什么找不到厂商描述符

回复评论 (5)

不错呀!哈哈!
点赞  2012-6-7 12:40

再上一个读SD卡的程序

再上一个读SD卡的程序,读SD卡根目录的test.txt文件,并将英文显示出来
很简单,就不上图了

点赞  2012-6-8 16:18
楼主很强大  辛苦了
点赞  2012-6-8 18:14
louzhuxinku
点赞  2012-6-8 18:45
楼主威武
点赞  2012-6-9 08:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复