- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于 STM32_USB-Host-Device_Lib_V2.1.0 或 V2.2.0 官方
DEMO 例程的 STM32F4 全速 USB 虚拟串口 VCP 程序裁剪
教程
1. 概述
本文档是基于 STM32_USB-Host-Device_Lib_V2.1.0官方库中 Device下 STM32F4
全速 VCP裁剪的,主要是利用 STM32F4已有资源,代替 UART串口,用于和上位
机进行通信,理论最大通信速率是 64*19*8b/1ms=950kbps,这里的 64是 1个包
数据量 64个字节,19是一帧最大是 19个包,8是一个字节 8位,1ms是一帧的
时间,详见 USB2.0 英文协议。如果想开发更高速模式下的通信,可以考虑使用
高速模式下的 VCP通信,本文档也可以作为参考。
以下是列举的准备工作:
1下载 STM32_USB-Host-Device_Lib_V2.1.0官方库,同时去 ST官方下载 UM1021
关于本例程的说明文档。可以在 ST官方下载,找不到的也可以去 STMCU论坛搜
索。
2本文档的图片是基于 IAR6.4开发环境进行截图。
3下载 USB2.0英文协议。需要了解 USB的枚举,以及 USB的工作机制,对每次
发起通信都是由主机轮询开始的有清晰的认识,并重点看一下批量传输。有条件
的可以借用 USB480协议分析仪。
4阅读 STM32F4数据手册中关于 USB的一些寄存器的介绍。
2. 如何区分全速设备和高速设备
USB如何区分低速、全速和高速设备:对于全速和高速设备,上拉电阻是接在 D+
上;而低速设备则是上拉电阻接在 D-上。
3. USB枚举过程
(1)USB主机检测到 USB设备插入后,对设备复位。
(2)USB主机对设备发送获取设备描述符的标准请求。
(3)设备收到该请求后,在数据过程将设备描述符返回给主机。
(4)主机在成功获取到一个数据包的设备描述符后并且确认无错误后,返回一
个 0长度的状态数据包给设备。
(5)主机再对设备复位一下,接下来进入到设置地址阶段。
(6)USB主机发出一个设置地址的请求,地址包含在建立包中。
(7)USB设备在收到地址后,返回 0长度的状态包。
(8)主机收到 0长度的状态包之后,返回一个 ACK。
(9)设备在收到这个 ACK之后,就可以启用新的地址了。
USB 一直进中断的原因:主机每 1ms 就给设备发送一个 sof,3ms 没反应主机就
挂起。所以一直进中断属于正常现象。
4. STM32F4的 USB的中断作用
STM32 的 USB 模块可以产生三种中断:USB 唤醒中断、USB 高优先级中断和 USB
低优先级中断,在 STM32 的参考手册中没有详细说明这三种中断对应哪些事件,
现说明如下:
1)USB唤醒中断:在中断向量表中的位置是 42。这个中断在 USB设备从暂停模
式唤醒时产生,唤醒事件由 USB_ISTR寄存器的 WKUP位标识。
2)USB 高优先级中断:在中断向量表中的位置是 19。这个中断仅由 USB 同步
(Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生,正
确传输事件由 USB_ISTR寄存器的 CTR位标识。
3)USB低优先级中断:在中断向量表中的位置是 20。这个中断由所有其它的 USB
事件产生,例如正确传输(不包括同步模式和双缓冲块模式)、USB复位等,事件
标志位在 USB_ISTR寄存器中。
在 STM32的 USB开发包的例子中包含了上述中断的处理,例如在 USB扬声器的例
子中,CTR_HP函数处理 USB高优先级中断;在所有例子中都有 USB_Istr()函数
处理 USB低优先级中断。
5. STM32F4的 USB虚拟串口 Demo的使用
1下载 STM32的官方例程:STM32_USB-Host-Device_Lib_V2.1.0
2开发板自己准备,要求 PA11,PA12连接 D+,D-,PA9是否连接 VBUS都可以
3打开例程:
STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Device_Examples\VCP\EWAR
M里的工程配置 cpu为 stm32F407IG,
4C/C++预定义:
USE_STDPERIPH_DRIVER,STM32F4XX,USE_STM324xG_EVAL,USE_USB_OTG_FS
5打开 USB_conf.h 文件,把 #define VBUS_SENSING_ENABLED 封掉,如果我们
不用 VBUS(PA9)。 否则不用封掉。
6编译,下载,复位板子,并安装虚拟串口驱动(ST官网上有),上面的步骤完
成后,计算机中的虚拟串口出来。如果不
文档评论(0)