打印
[应用相关]

STM32 USB设计 单片机程序篇

[复制链接]
1159|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yyller|  楼主 | 2020-9-4 07:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yyller 于 2020-9-4 07:47 编辑

首先,我们来看看usb的工作过程。
当usb设备接入到主机时,主机开始枚举usb设备,并向usb设备发出指令要求获取usb设备的相关描述信息,其中包括设备描述(device descriptor)、配置描述(configuraTIon descriptor)、接口描述(interface descriptor)、端点描述(endpoint descriptor)等。
这些信息是通过端点0(endpoint 0)传送到主机的。获取各种描述信息后,操作系统会为其配置相应的资源。这样主机就可以与设备之间进行通信了。        
Usb通讯有四种通讯方式控制(control)、中断(interrupt)、批量(bulk)和同步( synchronous)。usb通讯是通过管道(pipe)实现的。管道是一个抽象的概念,指的是主机与设备之间通讯的虚拟链路。不如说一个usb通讯 主机A和设备B,其中有bulk in(批量输入)、bulk out(批量输出)、
control out(控制输出)三种通讯方式,那么A与B之间的通讯管道就有三个。(这里明确一个概念,在usb通信中数据流向都是相对设备来说的,in表示设备向主 机传送数据,out表示表示主机箱设备传输数据)。在设备一端,每个管道对应一个端点,端点配置相关的寄存器和缓冲区。在通讯之前需对端点进行相关设置。 在通信中,只需向缓冲写或读数据,并置位相关比特位即可。
下面具体从usb的中断输入输出来讲述基于keil C mdk开发环境的stm32的USB接口单片机程序设计。值得一提的是,st或相关公司给我们提供许多封装函数和相关例子,我们可以根据其中的例子并进行修改即可实现我们自己需要的usb通讯程序。
          1.usb描述符配置
          从上面的讲述可以看出,usb描述符是usb通讯的前提。主机必须先了解设备后才能与其进行通讯。在st提供的例子中,描述符都在usb_des.c文件进行定义,下面就其中的JoysTIck例子说明usb描述负的配置。
          1.1设备描述符
          const u8 JoysTIck_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =
          {
          0x12, /*本描述长度*/
          USB_DEVICE_DESCRIPTOR_TYPE, /*指明为设备描述符*/
          0x00,
          0x02,
          0x00,
          0x00,
          0x00,
          0x40, /*最大数据包大小为64字节(对于端点0而言)*/
          0x84, /*生产商ID*/
          0x19,
          0x06, /*产品ID*/
          0x04,
          0x00,
          0x02,
          1,
          2,
          3,
          0x01 /*配置描述符数目*/
          }
          设备描述符两个重要参数是生产商ID和产品ID,主机将根据以上两个ID为设备选择相应驱动程序。在我们的应用中,我们一般只需修改例子中的这儿两个参数即可完成设备描述符的设置。
          1.2配置描述符
          const u8 Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC] =
          {
          0x09,
          USB_CONFIGURATION_DESCRIPTOR_TYPE,
          JOYSTICK_SIZ_CONFIG_DESC,
          0x00,
          0x01, /*接口数目*/
          0x01, /*Set_Configuration命令所需要的参数值*/
          0x00, /*描述该配置的字符串的索引值*/
          0xE0, /*供电模式的选择,bus供电、自供电、支持wakeup*/
          0x32, /*最大供电电流*/
          /************** 接口1配置****************/
          0x09,
          USB_INTERFACE_DESCRIPTOR_TYPE,
          0x00, /*接口编号*/
          0x00,
          0x02, /*端点数*/
          0x00,
          0x00,
          0x00,
          0, /*接口描述符索引值*/
          /******************** 端点1输出描述********************/
          0x07,
          USB_ENDPOINT_DESCRIPTOR_TYPE,
          0x81, /*端点地址,b.7表示方向(1为in,0为out)b.0-b.3为端点标号*/
          0x03, /*端点数据传输方式*/
          0x08, /*最大数据包大小*/
          0x00,
          0x20,
          /******************** 端点1输入描述********************/
          0x07,
          USB_ENDPOINT_DESCRIPTOR_TYPE,
          0x01, /*端点地址*/
          0x03, /*端点数据传输方式*/
          0x40, /*最大数据包大小*/
          0x00,
          0x20,
          }
          配置描述符中包括了接口、端点的配置。如果设备为HID设备,在配置描述符中还应加入HID描述,具体描述可以参照Joystick例子的配置。
          还有一些其他配置可以参可相关资料与例子加以理解。


使用特权

评论回复
沙发
gygp| | 2020-9-5 13:25 | 只看该作者
如何实现STM32F407的USB

使用特权

评论回复
板凳
chenci2013| | 2020-9-5 13:25 | 只看该作者
stm32的usb能从底层开发吗

使用特权

评论回复
地板
biechedan| | 2020-9-5 13:25 | 只看该作者
           

使用特权

评论回复
5
wangdezhi| | 2020-9-5 13:26 | 只看该作者
stm32usb虚拟串口怎么实现

使用特权

评论回复
6
isseed| | 2020-9-5 13:26 | 只看该作者
stm32f10xxx的usb模块的特点是怎样的?

使用特权

评论回复
7
xietingfeng| | 2020-9-5 13:26 | 只看该作者
如何用STM32系列内核的MCU与PC进行USB通信

使用特权

评论回复
8
suzhanhua| | 2020-9-5 13:26 | 只看该作者
stm32f103 usb 速率多少  

使用特权

评论回复
9
mituzu| | 2020-9-5 13:27 | 只看该作者
如何使STM32进行USB传输时提高传输速度

使用特权

评论回复
10
hellosdc| | 2020-9-5 13:27 | 只看该作者
mdk5.1 stm32怎么移植usb

使用特权

评论回复
11
uiint| | 2020-9-5 13:27 | 只看该作者
stm32usb修改为双缓冲需要注意什么

使用特权

评论回复
12
wangdezhi| | 2020-9-5 13:27 | 只看该作者
stm32 用usb和串口哪个好

使用特权

评论回复
13
biechedan| | 2020-9-5 13:27 | 只看该作者
谢谢楼主的资料了。   

使用特权

评论回复
14
isseed| | 2020-9-5 13:27 | 只看该作者

stm32的usb接口外接u盘什么芯片比较好

使用特权

评论回复
15
chenci2013| | 2020-9-5 13:27 | 只看该作者
stm32通过USB与stm32通讯可以吗?

使用特权

评论回复
16
gygp| | 2020-9-5 13:27 | 只看该作者
如何修改STM32的USB例程为自己所用

使用特权

评论回复
17
hellosdc| | 2020-9-5 13:27 | 只看该作者
一个stm32片子上最多可以用多少个usb口

使用特权

评论回复
18
xietingfeng| | 2020-9-5 13:28 | 只看该作者
STM32的usb 是HOST 还是DEVICE  

使用特权

评论回复
19
uiint| | 2020-9-5 13:28 | 只看该作者
STM32支持的usb传输的理论速度是多少MB/S

使用特权

评论回复
20
mituzu| | 2020-9-5 13:28 | 只看该作者
如何用STM32系列内核的MCU与PC进行USB通信

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

241

帖子

1

粉丝