基于STM32的USB设计

发布者:创新思绪最新更新时间:2012-10-15 来源: 21ic 关键字:STM32  USB  通讯方式 手机看文章 扫描二维码
随时随地手机看文章

首先,我们来看看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例子的配置。

还有一些其他配置可以参可相关资料与例子加以理解。

关键字:STM32  USB  通讯方式 引用地址:基于STM32的USB设计

上一篇:苹果获ARM技术授权 或放弃英特尔处理器
下一篇:STM32的USB键盘及鼠标的例程介绍

推荐阅读最新更新时间:2024-03-16 13:10

Diodes 公司推出 USB Type-C PD3.0 接收控制器
Diodes 公司推出 USB Type-C PD3.0 接收控制器,提供精简且具成本效益的充电解决方案 【2022 年 06 月 29 日美国德州普拉诺讯】Diodes 公司 (Diodes) 新推出两款高效能 USB PD3.0 Sink 控制器 IC,持续强化其 USB Power Delivery (PD) 解决方案的产品组合。 AP33771 与 AP33772 接收控制器专为家电及无线电动工具所设计,可透过 USB-C 协调,达到适当的电压电位。两款控制器的操作电压范围为 3.3V 至 24V。 AP33771 针对电压和功率需求,采用简易的接脚设定,以增加使用便利性,而 AP33772 可为具备 µC
[模拟电子]
Diodes 公司推出 <font color='red'>USB</font> Type-C PD3.0 接收控制器
STM32学习笔记之Bootloader升级Ymodem协议简介
YModem协议 YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议 。 源码宏定义 #define SOH (0x01) /* start of 128-byte data packet / #define STX (0x02) / start of 1024-byte data packet / #define EOT (0x04) / end of transmission / #define ACK (0x06) / acknowledge / #define NAK (0x15) / negative acknowledge / #define CA (0x18
[单片机]
<font color='red'>STM32</font>学习笔记之Bootloader升级Ymodem协议简介
STM32:重定向 prinft 和 getchar 函数,但是使用过程串口出现问题
在STM32学习中,我们肯定会学到串口的使用。其中关于串口数据的接收和发送,我们其实可以用 printf() 函数和 getchar() 函数来简化传输。我们只需要做一些简单的前期工作即可。 在 C 语言标准库中,fputc 函数是 printf 函数内部的一个函数,功能是将字符 ch 写入到文件指针 f 所指向文件的当前写指针位置,简单理解就是把字符写入到特定文件中。我们使用 USART 函数重新修改 fputc 函数内容,达到类似“写入”的功能。 fgetc 函数与 fputc 函数非常相似,实现字符读取功能。在使用 scanf 函数时需要注意字符输入格式。 还有一点需要注意的,使用 fput 和 fgetc 函数
[单片机]
<font color='red'>STM32</font>:重定向 prinft 和 getchar 函数,但是使用过程串口出现问题
STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关系
NVIC是Cortex-M3核心的一部分,关于它的资料不在《STM32的技术参考手册》中,应查阅ARM公司的《Cortex-M3技术参考手册》 Cortex-M3的向量中断统一由NVIC管理 EXTI是ST公司在其STM32产品上扩展的外中断控制。它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断(PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。其输出最终被映射到NVIC的相应通道。因此,配置EXTI中断的过程必然包含对NVIC的配置,例如下面配置EXTI0的过程,就要首先配置EXTI控制器(使能相应的中断线,选择中断/事件模式,触发边沿极性),然后再配置NVIC控制器
[单片机]
扩展USB连接的几种方案比较
扩展USB连接的几种方案比较 USB(通用串行总线)是现在支持许多通用现成的外围设备,如键盘,鼠标,打印机和存储设备等的公认作为首选的连接方案。对于致力于工业和消费市场的设备制造商来说,USB也成为满足其连接至PC需求的一个优先的选择。事实上,对于任何一个使用标准的PC作为控制器设备的应用, USB接口的好处是显而易见的。虽然大批量短生命周期的通用外设可以不使用USB接口,一些有更长的生命周期的定制型应用则需要添加USB连接来解决现代 PC缺乏传统的连接接口的问题。 在这些现代PC所不支持的接口中,RS - 232串行接口是一个典型的例子,从软件的角度看,RS-232相比USB更容易实现且同样仍然满足多种应用需求。但是大多
[模拟电子]
扩展<font color='red'>USB</font>连接的几种方案比较
STM32 内存分配解析及变量的存储位置
内存映射 在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM。在对于 RAM 紧缺的嵌入式系统中,是缺少 MMU 内存管理单元的。因此在一些嵌入式系统中,比如常用的 STM32 来讲,内存映射被划分为闪存段(也被称为Flash,用于存储代码和只读数据)和RAM段,用于存储读写数据。 STM32 的 Flash 和 RAM 地址范围 笔者标题所说的内存是指 STM32 的 Flash 和 RAM,下图是 ARM Cortex M3 的地址映射图: 从图中我们可以看到 RAM 地址是从 0x2000 0000 开始的,Flash地址是从 0x08
[单片机]
<font color='red'>STM32</font> 内存分配解析及变量的存储位置
STM32学习之路-按键中断测试(外部中断)
终于有时间再来学习STM32了~ 这几天都在忙着该死的考试.直接进入正题 开发板:奋斗V5 这个按键中断测试的要求是:按键2(K2)按下,LED2(V7)亮, 再一次按下就灭,循环.. 好,先看看按键和LED的原理图 好吧~ 虽然图截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6 ok,剩下的就是配置工作了.. 先来理一理思路: (1)初始化系统时钟 (2)初始化外部时钟(你所用到的东西) (3)配置LED (4)配置中断优先级 (5)配置外部中断线 (6)中断处理函数 恩,差不多就是这样了.. 然后再来一条一条的看:(1)和(2)都属于RCC配置,可以放在一个功能模块里面: pre name= co
[单片机]
基于USB-Host的大容量数据采集系统的设计
引言 随着移动数据存储领域的日益扩大,在嵌入式系统中实现USB主机功能,以实现利用USB存储设备进行数据存储的需求变得日益迫切。U盘作为新型移动存储设备,以体积小、速度高、抗震动、通用性强的特点倍受青睐,因此,在数据采集系统中开发出嵌入式USB主机控制U盘作为数据存储器,将具有良好的实用价值和应用前景。 1 USB大容量存储设备协议分析 基于USB的大容量数据采集系统的设计,主要是要实现嵌入式USBHost。要想设计出能直接读写U盘的嵌入式USBHost,就必须理解USB大容量存储设备协议。目前USB大容量存储设备软件结构如图1所示。 图1 USB大容量存储设备软件结构示意图 图1中,虚线左边部分是主机的
[缓冲存储]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved