为什么stm32 usb鼠标连接电脑鼠标就失控

关闭一个文件 file_read
euint32 file_read (File *file, euint32 size, euint8 *buf); 读文件 file_write
euint32 file_write(File *file, euint32 size, euint8 *buf); 写文件 Rmfile
esint16 rmfile(FileSystem *fs,euint8* filename); 移除文件 mkdir
esint8 mkdir(FileSystem *fs,eint8* dirname); 创建字典 ls_openDir
esint8 ls_openDir(DirList *dlist,FileSystem *fs,eint8* dirname); 打开字典 ls_getNext
esint8 ls_getNext(DirList *dlist); 获取另一个文件字典 2.3.2 USB人机接口设备(HID)类驱动鼠标键盘设备 V1.0 USB主机库中的HID类目的是实现支持HID鼠标和键盘设备。 HID报告通过中断输入传输收到。 以下模块,位于class\\HID文件夹,用于执行HID类: Table 12. HID class modules 队列(模块)
描述 usbh _ hid_ core.c / .h
这个模块执行HID类核心状态机 usbh _hid_ mouse.c / H
HID鼠标具体例程 usbh _hid _ keyboard.c / .h
HID键盘的具体例程
各模块的主要功能如下。 HID类核心: HID核心模块在“usb_hid_core.C”通过usbh_class_cb_typedef定义hid_cb类结构实现了HID类驱动程序(见2.3节)。 USBH_Class_cb_TypeDef HID_cb =
{ USBH_HID_InterfaceInit, USBH_HID_InterfaceDeInit, USBH_HID_ClassRequest, USBH_HID_Handle }; 下表总结了HID内核模块实现的功能。 函数原型描述 表13MSC核心功能模块 Function
Description USBH_HID_InterfaceInit
解析接口和端点描述符,设置一个主模式通道来获取一个中断输入通道(为了获取HID报告) USBH_HID_InterfaceDeInit
释放分配的中断输入通道 USBH_HID_ClassRequest
实现需要的HID鼠标和键盘的设备的类请求状态机(如:获取HID报告描述符,设置空闲时间,设置协议)。 USBH_HID_Handle
HID类核心状态机(处理中断输入传输) USBH_Get_HID_ReportDescriptor
获取HID报告描述符类请求 USBH_ParseClassDesc
功能用于解析HID报告描述符 USBH_Set_Idle
用于设置空闲时间的类请求 USBH_Set_Report
用于发送报告输出数据(不是用于演示软件)的类请求 USBH_Set_Protocol
用于设置HID协议:启动或报告的类请求 1. usb_set_protocol被调用用来设置启动协议模式。 HID鼠标和键盘的具体管理: 检测鼠标或键盘装置通过在功能函数usbh_hid_interfaceinit中解析接口描述符来完成。 对于每种具体类型的设备的初始化和收到的数据报告的解码是由结构类型hid_cb_typedef声明的两个功能 它的定义如下: typedef struct HID_cb { void (*Init) (void);
void (*Decode) (uint8_t *data);
} HID_cb_TypeDef 上述结构在发现鼠标或键盘的情况下实施hid_mouse_cb和hid_mouse_cb声明如下: HID_cb_TypeDef HID_MOUSE_cb =
{ MOUSE_Init, MOUSE_Decode, }; HID_cb_TypeDef HID_KEYBRD_cb=
{ KEYBRD_Init, KEYBRD_Decode }; 表14。鼠标和键盘初始化和HID报告的解码功能 功能
描述 mouse_init
为USB鼠标初始化程序 mouse_decode
为鼠标解码HID报告(解码鼠标X,Y的坐标,按下按钮) keybrd_init
为USB键盘 初始化程序 1。azerty或QWERTY键盘的选择是通过在文件usbh_hid_keybrd.h中# qwerty_keyboard, # azerty_keyboard来声明的
3库用户API和回调函数 3.1库用户API 库用户API功能局限于以下两个功能: ■void usbh_process(void):此功能实现的核心状态机程序。它要从用户的主循环周期调用。 ■usbh_init:这个函数应该被称为主机的USB硬件与库的初始化。 下面为usbh_init的函数原型: void USBH_Init(USB_OTG_CORE_HANDLE *pdev, USBH_Class_cb_TypeDef *class_cb,
USBH_Usr_cb_TypeDef *usr_cb) Cpdev:指向USB主机寄存器核心结构的指针(为了将来需要) Cclass_cb:指针指向类结构USBH_Class_cb_TypeDef,它既可以指向MSC_cb类来操作MSC设备也可以指向HID_cb类操作HID鼠标/键盘设备。 Cusr _cb:指向USBH_Usr_cb_TypeDef类结构。这个结构定义独立类回调函数。(见3.2.2节) 3.2用户的回调函数 用户回调函数在用户模板文件usbh_usr.c中声明 定义了两种类型的用户回调: ■与类的相关操作的回调函数(MSC或HID) ■与类操作相独立的回调函数;他们主要是在枚举阶段被调用。这些回调是一个USBH_Usr_cb_TypeDef结构类型中定义 3.2.1类的回调函数 MSC用户回调函数功能 对于MSC,下面的回调函数被调用:int usr_msc_application(void)。 类的初始化结束后,这个函数被MSC状态机调用的为了帮助用户访问文件操作系统。 在这个回调函数,用户可以访问任何FAT文件系统(文件打开,文件读,写文件……)使用EFSL文件系统API。 同时,用户可以访问一个与库MSC类驱动不同的出口结构变量,usbh_msc_param。这个变量提供关于大容量存储的关键信息。 这个变量是使用一种类型massstorageparameter_typedef定义的结构,定义如下: typedef struct __MassStorageParameter { uint32_t MSC /*MS device capacity in bytes */ uint32_t MSSenseK /*Request Sense SCSI command returned value */ uint16_t MSPageL /* MS device Page length */ uint8_t MSBulkOutEp; /* Bulk OUT endpoint address */ uint8_t MSBulkInEp; /*Bulk IN endpoint address */ uint8_t MSWriteP /*Write protection status, 0: non protected, 1:protected */ } MassStorageParameter_TypeD HID用户的回调函数 对HID类,以下定义的回调函数: ■void USR_MOUSE_Init(void):用户的鼠标应用程序初始化 ■void USR_KEYBRD_Init(void):键盘应用的用户初始化 ■void USR_MOUSE_ProcessData(HID_MOUSE_Data_TypeDef *data):这个回调函数 被调用当hid_mouse_data_typedef数据类型的输入参数有效时(见下面附注1)。 ■void USR_KEYBRD_ProcessData (uint8_t data):这个回调被调用时,一个新的ASCII字符型。其特征是输入参数数据。 注:1 HID_MOUSE_Data_TypeDef定义如下: typedef struct _HID_MOUSE_Data { uint8_
uint8_ uint8_
/* Not Supported */
uint8_ /*Bitmap showing pressed buttons 1:pressed, 0: non pressed */ }
HID_MOUSE_Data_TypeD 3.2.2类独立的回调函数 这类独立的回调函数是在一个结构类型定义 usbh_usr_cb_typedef定义如下: typedef struct _USBH_USR_PROP { void (*Init)(void);
void (*DeviceAttached)(void);
void (*ResetDevice)(void); void (*DeviceDisconnected)(void);
void (*OverCurrentDetected)(void);
void (*DeviceSpeedDetected)(uint8_t DeviceSpeed);
void (*DeviceDescAvailable)(void *); void (*DeviceAddressAssigned)(void);
void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *, USBH_InterfaceDesc_TypeDef *, USBH_EpDesc_TypeDef *);
void (*ManufacturerString)(void *);
void (*ProductString)(void *);
void (*SerialNumString)(void *);
void (*EnumerationDone)(void);
USBH_USR_Status (*UserInput)(void); void (*USBH_USR_DeviceNotSupported)(void);
void (*UnrecoveredError)(void); } USBH_Usr_cb_TypeD 以上回调函数功能描述如下。 C初始化:初始化时被usbh_init内核调用的功能。在这个功能,用户可以实现任何自己的应用程序相关的特定的初始化。 Cdeviceattached:当一个USB设备连接时被调用。它可以通过显示屏告诉用户任何有用的设备连接信息。 Cdevicereset:从主模式发出的USB复位命令。 Cdevicedisconnect:“当一个设备断开时调用。 Covercurrentdetected:对USB的VBUS电流进行检测时调用。 Cdevicespeeddetected:检测装置传输速率时调用 Cdevicedescavailable:设备描述符有效时调用 Cdeviceaddressassigned:当设备地址分配时调用。 Cconfigurationdescavailable:当设备,接口和端点描述符可用时调用描述符是可用的 Cmanufacturingstring:提取制造商字符串时调用。 Cproductstring:提取设备字符串时调用。 Cserialnumstring:序列号字符串提取时调用。 Cenumerationdone:枚举完成时调用。 Cuserinput:枚举的过程结束后,提示用户进一步的行动,如按下一个按钮启动主模式的类操作 Cusbh_usr_devicenotsupported:被检测的设备是在不在当前类驱动程序支持时调用。 Cunrecoverederror:在“host_error_state”状态时调用内核的状态机。它允许用户处理任何错误,在液晶屏上显示一个错误的信息,例如。 注:1设备的速率信息是通过devicespeed参数返回。可能的值是:0x1对应全速设备,0x2对应低速设备。 2设备描述符的信息通过指针DeviceDesc返回,它指向usbh_devdesc_typedefdefined型结构如下: typedef struct _DeviceDescriptor { uint8_t bL uint8_t bDescriptorT uint16_t bcdUSB; /* USB Specification Number which device complies too */ uint8_t bDeviceC uint8_t bDeviceSubC
uint8_t bDeviceP uint8_t bMaxPacketS uint16_t idV /* Vendor ID (Assigned by USB Org) */ uint16_t idP /* Product ID (Assigned by Manufacturer) */ uint16_t bcdD /* Device Release Number */ uint8_t iM /* Index of Manufacturer String Descriptor */ uint8_t iP /* Index of Product String Descriptor */ uint8_t iSerialN /* Index of Serial Number String Descriptor */ uint8_t bNumC /* Number of Possible Configurations */ } USBH_DevDesc_TypeDstm32怎么读取usb光电鼠标移动的数据_百度知道
stm32怎么读取usb光电鼠标移动的数据
我有更好的答案
现在我可以在电脑中的内容复制到SD卡,因为我有一个录音设备,同时记录保存在U盘文件的录音设备被改变,我现在,接上去后,录音设备首先必须反馈U盘设备其实我是想用它来模拟U盘设备
为您推荐:
其他类似问题
光电鼠标的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。stm32f103 怎么控制鼠标_百度知道
stm32f103 怎么控制鼠标
我有更好的答案
怎么控制鼠标
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。stm32怎样同时连接鼠标和键盘_百度知道
stm32怎样同时连接鼠标和键盘
我有更好的答案
很简单,你重新入一个鼠标就行啦,很多大牌的鼠标不错的,比如嗜血狂、牧马人、雷柏V20都挺好
采纳率:93%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
stm32的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 stm32 cube 鼠标键盘 的文章

 

随机推荐