好不容易刚搞定,中间状况频出,一波三折啊...
这里上程序,图片,视频和工具资料,及移植步骤注意点
调试了用附件那个调试工具,很方便,用法网上搜。
几点注意的地方:
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 编辑 ]