没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32F4 USB虚拟串口VCP程序教程
资源详情
资源评论
资源推荐
基于 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,
4>C/C++预定义 :
USE_STDPERIPH_DRIVER,STM32F4XX,USE_STM324xG_EVAL,USE_USB_OTG_FS
5>打开 USB_conf.h 文件,把 #define VBUS_SENSING_ENABLED封掉 ,如果 我们
不用 VBUS(PA9)。 否则不用 封掉 。
6>编译,下载, 复位板子 ,并安装虚拟 串口 驱动 (ST官网上有 ),上面的步骤完
成后 ,计算 机中的 虚拟串口 出来 。如果不 出来很 可能是 D+和 D-的连线问题 ,请
检查下是 否需要连接 ESD和去耦电容。
7>记得将 Demo程序的优化等级 改成 None,避免跟踪调试 时乱跳 。
6. STM32F4的 USB虚拟串口 Demo解析
官方例程用 IAR打开如上 图所示,这里主要关 注下 app.c 源文件、stm32fxxx_it.c
源文 件、 usbd_cdc_vcp.c 源文 件和 usbd_cdc_core.c 源文件。
1>App.c 源文 件有 main 函数, main 函数主要是 USBD_Init() 语句,是 对 USB虚
拟串口设备的初始化,进行 添加 自己的语句也主要是在 while (1)语句里。
2>初始化后,USB的枚举及传输 数据 都是在 stm32fxxx_it.c 的中断中发起的。
枚举是在中 断和底层驱动 及内核 中完成的,这里不用 管,也不 需要改动。
3>对于数据的 传输 是我们 关心的是在 usbd_cdc_vcp.c 中, 阅读例程, 我们 可以
发现,USBD_Init() 语句初 始化时初始化了两个串口: COM1和 EVAL_COM1,如下
图 usbd_cdc_vcp.c 的第 106 行到 109行;其中 COM1是虚拟出来 的串口,即 USART0,
而 EVAL_COM1是真实存在的 USART2,挂载在 APB1总线上,详见 stm32f407xx 数
据手册。
进一 步下向下读程序,是打开了 USART2的接收 中断,通过 USART2的接收 中断接
收数据, 并通过 VCP_DataTx(0,0) 进行了数据处理,如下 图 usbd_cdc_vcp.c 的
第 366 行到 379 行。
下面主要 看看 VCP_DataTx(0,0) 是怎么 处理的,如下 图所示 是 usbd_cdc_vcp.c
的第 208 行到 228 行。是将通过 USART2的中 断接收 的数据 放进 APP_RxBuffer[]
中,这里的数 组最大长度 是 2048。
上面的 APP_RxBuffer[] 是定义 的全 局变量,这个全 局变 量到底是干什么 的呢,
我们 进一 步发 现 APP_RxBuffer[] 在 usbd_cdc_vcp.c 源文 件 中亦 有出现 。在
usbd_cdc_vcp.c 源文件中第 624 行到 661 行,阅读 这个 函数, 知道这个 函数主
要是 将 APP_RxBuffer[] 中的数据发 送到 主机的 IN 端点(关于端点概念不理 解的
建议阅读 USB2.0英文协议 )
剩余23页未读,继续阅读
fozhulidexian
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2