资源描述:
《stm32usb设计原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、广州虹科电子科技有限公司http://www.hkaco.comSTM32USB设计原理首先,我们来看看USB的工作过程。当USB设备接入到主机时,主机开始枚举USB设备,并向USB设备发出指令,要求获取USB设备的相关描述信息,其中包括设备描述(devicedescriptor)、配置描述(configurationdescriptor)、接口描述(interfacedescriptor)、端点描述(endpointdescriptor)等。这些信息是通过端点0(endpoint0)传送到主机的。获取
2、各种描述信息后,操作系统会为其配置相应的资源。这样主机就可以与设备之间进行通信了。USB通讯有四种通讯方式控制(control)、中断(interrupt)、批量(bulk)和同步(synchronous)。USB通讯是通过管道(pipe)实现的。管道是一个抽象的概念,指的是主机与设备之间通讯的虚拟链路。比如说一个USB通讯主机A和设备B,其中有bulkin(批量输入)、bulkout(批量输出)、controlout(控制输出)三种通讯方式,那么A与B之间的通讯管道就有三个。(这里明确一个概念,在US
3、B通信中数据流向都是相对设备来说的,in表示设备向主机传送数据,out表示表示主机箱设备传输数据)。在设备一端,每个管道对应一个端点,端点配置相关的寄存器和缓冲区。在通讯之前需对端点进行相关设置。在通信中,只需向缓冲写或读数据,并置位相关比特位即可。下面具体从USB的中断输入输出来讲述基于keilCmdk开发环境的STM32的USB接口单片机程序设计。值得一提的是,ST或相关公司给我们提供许多封装函数和相关例子,我们可以根据其中的例子并进行修改即可实现我们自己需要的USB通讯程序。1.USB描述符配置
4、 从上面的讲述可以看出,USB描述符是USB通讯的前提。主机必须先了解设备后才能与其进行通讯。在ST提供的例子中,描述符都在USB_des.c文件进行定义,下面就其中的Joystick例子说明USB描述负的配置。1.1设备描述符constu8Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC]={ 0x12, /*本描述长度*/广州虹科电子有限公司广州虹科电子科技有限公司http://www.hkaco.com
5、 USB_DEVICE_DESCRIPTOR_TYPE, /*指明为设备描述符*/ 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, /*最大数据包大小为
6、64字节(对于端点0而言)*/ 0x84, /*生产商ID*/ 0x19, 0x06, /*产品ID*/ 0x04, 0x00, 0x02, 1, 2, 3,
7、 0x01 /*配置描述符数目*/}广州虹科电子有限公司广州虹科电子科技有限公司http://www.hkaco.com设备描述符两个重要参数是生产商ID和产品ID,主机将根据以上两个ID为设备选择相应驱动程序。在我们的应用中,我们一般只需修改例子中的这儿两个参数即可完成设备描述符的设置。1.2配置描述符constu8Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC]={ 0x09, USB_CONFIGURATI
8、ON_DESCRIPTOR_TYPE, JOYSTICK_SIZ_CONFIG_DESC, 0x00, 0x01, /*接口数目*/ 0x01, /*Set_Configuration命令所需要的参数值*/ 0x00, /*描述该配置的字符串的索引值*/ 0xE0, /*供电模式的选择,bus供电、自供电、支持wakeup*/ 0x32,