STM32 USB学习笔记1

发布者:JoyfulSerenade最新更新时间:2019-05-29 来源: eefocus关键字:STM32  USB  学习笔记 手机看文章 扫描二维码
随时随地手机看文章

主机环境:Windows 7 SP1


开发环境:MDK5.14


目标板:STM32F103C8T6


开发库:STM32F1Cube库和STM32_USB_Device_Library


之前在STM32论坛里领取过一块STM32开发板,本来以为是带有USB模块接口的,最后发现NUCLEO里是没有把USB模块外接出来的,所以就自个儿掏钱买了一块单板,如下图所示:


单板很简单,单纯是为了学习一下STM32的USB模块,之所以选择这个是因为它便宜,而且ST官方有提供USB模块库方便开发。


USB开发博大精深,比之串口,SPI,I2C来说多了很多东西,一个很简单的例子就是串口,SPI,I2C都可以使用通用IO口来模拟实现,但USB却很少有人这么做。学习USB模块就要学习USB协议,USB协议从1.1到2.0再到3.0,现在貌似到3.1版本了都,版本更替了这么多但不影响我们学习,因为USB协议都是向后兼容的,学习了一个就够了。STM32F103C8T6的USB模块实现了USB2.0全速总线,符合USB2.0全速设备的计数规范,支持8个双向端点等。


USB总线使用两根线实现差分传输D+、D-,这跟485总线类似。因此,在USB总线上同一时刻只能有一个方向上的传输。


有关USB2.0协议规范可以从USB官网上下载,重点看第9章节即可,600多页的文档从头看到尾是很枯燥的。当然如果有精力的话,整个规范都看完也是很有好处的。跟USB2.0规范相关的还有很多类规范,在开发时如果有需要再看就可以了。


一、USB器件库概述


ST官网提供的USB文档有STM32Cube USB器件库,以及USB培训的一些文档,重点看USB器件库文档就好了,因为我们是把STM32的USB模块当作从设备,当然如果STM32支持USB主机的话还有另外一个主机库(不在这里讨论)。通过查看STM32Cube USB器件库,可以帮助我们快速理解USB模块的架构,简化应用开发。STM32CubeUSB设备库在Cube中所处位置如下:



USB设备库位于HAL驱动层之上,在开发中我们只需关注USB设备库即可,不必关注USB设备的HAL驱动,不然USB设备库就没有存在的意义了。而且USB设备库代码是只读的,不需要修改。


设备库中使用的主要结构体为设备句柄,其类型为USBD_HandleTypeDef,我们不必刻意关注USB HAL驱动中USB所使用的数据结构,因为它们对于我们来说是隐藏的,只需关注设备库曝露给我们的接口即可,设备库是和USB2.0协议密切相关的,因此需要熟悉USB2.0文档有助于我们理解设备库的工作流程。


USB设备库目录分为两层:一层为Core(核心层);另一层为Class(类层),目录结构如下:



结构比较清晰,核心层是不需要动的,类层是扩展用的。


USB设备库中核心层的usbd_conf文件是需要用户自己实现的,用来配置USB的属性,其各个文件的作用如下:



其中usbd_req改为了usbd_ioreq。由表7就可以看出USB2.0规范中第9章很重要。USB器件库文档还详细说明了一下控制端点0,这在USB开发中是一个重要的端点。其作为默认的控制端点用于接收主机发来的各种请求,请求作为Setup包发送到设备,请求又分为标准请求和非标准请求,标准请求在控制端点0上就可处理了,对于非标准请求通过回调函数传递给特定类进行进一步处理。


USB设备库的类层中各个文件作用如下:



其中的usbd_xxx_if_template文件需要由用户实现,目前跟USB设备库相关的文件有两个需要用户去实现即usbd_conf文件和usbd_xxx_if_template文件。至此USB器件库的概述说明就完毕了,更多详细情况查看USB器件库文档即可。


二、USB协议概述


USB协议中用到的一些逻辑部件:


端点:数据传输的最终对象


管道:主机和设备端点之间数据传输的模型


接口:用于描述特定的功能(有一组端点组成)


设备:由一个或多个接口组成


USB传输分为了3层:Packet、Transaction、Transfer,三者是由小到大,关系如下图:



一次Transfer传输分为几个Transaction,一次Transaction由几次Packer组成。


Packet包格式如下:



所有的USB传输都是由USB主机发起,这点跟I2C通信有些类似。


USB的传输分为4类:控制传输、中断传输、同步传输、批量传输,由此引申出4类端点类型:控制端点、中断端点、同步端点、批量端点。



控制传输是双向的,须有IN和OUT两个方向上的端点号。其他类型的传输是单向的。各类传输差别不是很大,只是对时间的要求不同。


有关USB协议的大概情况就介绍到这,更多详情请查阅USB2.0规范以及STM32F103的参考手册。后面将通过VCP具体示例来分析USB开发。



关键字:STM32  USB  学习笔记 引用地址:STM32 USB学习笔记1

上一篇:STM32 USB学习笔记2
下一篇:STM32L0xx_Hal_Driver库的使用--EXTI

推荐阅读最新更新时间:2024-11-16 20:29

ARM学习笔记11——GNU ARM汇编程序设计
  GNU ARM汇编程序设计中,每行的语法格式如下:    @comment   如果语句太长,可以将一条语句分几行来书写,在行末用“”表示换行。“”后不能有任何字符,包含空格和制表符(Tab)   参数说明: label:为标号,可选,可以使用字母,数字,下划线;除局部标号外,必须以字母或下划线开头。标号必须以“:”号结尾。标号大小写敏感 instruction | directive | pseudo-instruction:可选项,指令、伪指令、伪操作三者任选其一。注意:ARM指令,伪指令,伪操作,寄存器名称要么大写,要么小写,不可以大小写混合。 @comment:可选项,注释语句,@为注释标示符,
[单片机]
stm32体系架构详解
01 共同点和区别 STM32F10x芯片由丝印所体现出的共同点和区别。规则:101基本型,102USB基本型,103增强型,105或107互联型。T:36脚,C:48脚,R:64脚,V:100脚,Z:144脚。C:256K SRAM, D:384K SRAM, E:512K SRAM。 正对芯片的丝印,会看到芯片左下角会有一个小圆点(正方向),有的在右上角会有一个稍大点的圆圈标记,靠近左下角小圆点的管脚号为1,然后以逆时针方向,ZET6最后一个管脚号为144,VET6最后一个管脚号为100,即是Z的管脚多于V的,说以说Z的功能也要多于V的;接下来说说丝印上的ARM和ST,crotex-Mx内核是由ARM公司(就叫做IP厂
[单片机]
<font color='red'>stm32</font>体系架构详解
4*4键盘程序代码 基于STM32
这是自己写的扫描第一行按键的程序代码。 PE的位8~位11设置为下拉输入。 PE的位12~位15设置为推挽输出 其中PE的位11是4*4键盘的第一列,PE的为键盘的第一行。 先将第一行设置为高电平,检测列中是否有高电平 u8 KEY_Scan(u8 mode) { staticu8 key_up=1;//按键按松开标志 if(mode)key_up=1; //支持连按 GPIO_SetBits(GPIOE,GPIO_Pin_15); if(key_up&&( (GPIO_ReadInputDataBit(GPIOE, GPIO_Pin
[单片机]
STM32ADC中断的使用注意事项和优化建议
STM32ADC(模拟数字转换器)是STMicroelectronics开发的一款用于外部模拟信号转换为数字信号的器件。在使用STM32ADC时,合理地使用中断是提高系统性能和精确度的关键。本文将详细介绍STM32ADC中断的使用注意事项和优化建议。 注意事项: 1. 合理选择中断触发方式:STM32ADC可以通过软件触发(软件启动转换模式)和硬件触发(定时器、外部事件等)两种方式进行转换。软件触发可以根据需要灵活控制转换,适用于一些特定场景;硬件触发方式可以提高系统的实时性和准确性,但对硬件和软件操作有一定要求。 2. 选择合适的ADC转换模式:STM32ADC提供了多种转换模式,包括单次转换模式、连续转换模式和注入转换模式等。
[单片机]
S5PV210(TQ210)学习笔记——Nand配置
  S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整体上来讲,S5PV210的Nand flash配置还是非常简单的。   其实,配置一个模块往往需要以下几个步骤:   (1)根据原理图,理清模块的接线方式,对于Nand flash来说,就是看看Nand flash接到了哪些GPIO上,然后把对应的GPIO配置为Nand功能即可。   (2)阅读S5PV210手册,掌握相关模块控制器的功能、操作方式及寄存器配置。   (3)阅读模块芯片手册,掌握模块的访问控制时序。
[单片机]
S5PV210(TQ210)<font color='red'>学习</font><font color='red'>笔记</font>——Nand配置
关于STM32驱动DS1302实时时钟的一点思考
之前用51驱动过DS1302,没用多久就输出了正确的时间。当时以为这块芯片其实没啥,很简单。但是现在用STM32做项目,用到同样的芯片,以为这有何难,只要把那个程序拿过来复制黏贴改一下IO设置不就行了?但是事情远没有想想的那么简单。 经过3天的挣扎,现在才知道当时自己是多么天真。 关于DS1302的基本操作可以看这里:http://www.cnblogs.com/qsyll0916/p/7712695.html 好了,废话少说了,进入正题。 首先DS1302读写方式属于3线SPI。CE、SCK、IO。其中IO口属于双向IO口,我们读写都要经过这个IO口。在用51开发的时候,因外他是准双向IO,不需要我
[单片机]
STM32的多个ADC模块如何同时采样转换详细应用实例说明
在STM32家族里,多数系列芯片内含2到3个ADC模块,有的甚至更多,比方G4系列可以有5个ADC模块。其中,通道数因不同的系列或型号多少不等,几个到几十个的都有。有时,我们可能需要多个ADC模块同时工作,比方3个ADC模块同时采样转换。这时如果芯片内含有3个ADC模块,并支持同时采样转换就很方便。比方STM32F4系列、STM32F7等其它系列都含有3个ADC模块,并支持同时AD采样转换。 这里就3个ADC模块同时进行采样转换应用,做个简单实现示例,以供有需要的用户参考。此时3个ADC模块会建立主从关系。以STM32F4芯片为例。内部大致框架如下: 采样转换时按如下图示操作,每次对分别属于3个ADC模块的3个通道进行AD
[单片机]
<font color='red'>STM32</font>的多个ADC模块如何同时采样转换详细应用实例说明
发挥Cortex-M3极致性能的全新STM32 F-2系列(ST)
意法半导体(ST)宣布全新STM32 F-2微控制器产品系列正式上市,把Cortex-M3架构性能发挥到极致。 意法半导体全新的STM32 F-2先进微控制器产品系列整合意法半导体先进的90nm制程与创新的自适应实时存储器加速器(ART Accelerator™),成功发挥Cortex-M3架构的极致性能。当以120MHz速度从闪存执行代码时,STM32 F-2 微控制器的处理性能高达150 Dhrystone MIPS,这是Cortex-M3处理器在这个频率下的最高性能。CoreMark测试结果显示,当从闪存执行代码时,该系列产品的动态功耗为 188uA/MHz ,相当于在120MHz时消耗22.5mA电流。除内置现有Cor
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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