搜索

[信息] STM32上USB device库使用说明

[复制链接]
523|7
elephant00|  楼主 | 2021-5-14 11:03 | 显示全部楼层 |阅读模式
本篇 LAT 从控制传输的角度解析了运行在“USB FS IP”这款 USB 模块上的全速 USB 设备库的结构和用法。
背景 : 不同的 B USB 包 模块和其对应软件包
STM32 MCU 根据系列不同,所集成的 USB IP 有所不同。本文是针对“USB FS IP”这个 USB 模块在其编
号为 STSW-STM32121 的全速 USB 设备库的一个介绍。
USB FS IP
1. 集成于 STM32F1(除 F105/107)、STM32L1、STM32F3
2. 只支持全速(FS)下的 USB 设备角色
3. 软件包:STSW-STM32121 (v4.0.0)

使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:04 | 显示全部楼层
USB 设备库结构分析
中断处理响应所有的 USB 事件,如下图所示 。
133435jdghbdr3ebrh2e2w.png.thumb.jpg

使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:05 | 显示全部楼层
通过 控制传输举 处理标准枚举+类相关枚举
控制传输由三个 stage 组成,如下图所示:
133435kwzl7nbn56wn1i67.png.thumb.jpg

使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:06 | 显示全部楼层
在控制传输的( 第一阶段(Setup stage) ) 完成后,分析 Setup 数据包 8 字节命令,提供用户回调函数处理和应用所使用的类相关的控制命令

133436k4a33rsahllo34pq.png.thumb.jpg

使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:06 | 显示全部楼层
在控制传输的第 二( 阶段(IN  方向的 Data stage) ),处理第一阶段准备好(确定了数据长度和数据起始地址)的待发送的数据;
或者
( 在控制传输的最后阶段(IN  方向的 Status stage) ) 完成后,提供用户接口做应用相关任务

133436h48du5kos56hekbs.png.thumb.jpg

133437jgnffbzu8kgkk8gu.png.thumb.jpg


使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:07 | 显示全部楼层
在控制传输的第二阶段(OUT 方向的 Data stage),接收数据;或者
在控制传输的最后阶段(OUT 方向的 Status stage)完成后,提供用户接口做应用相关任务

133438alw8vq00xreq983x.png.thumb.jpg

133438ezttvudvdtuute4c.png.thumb.jpg


使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:08 | 显示全部楼层
结合 真实 枚举过程子 的传输来看几个实际的例子
举例 1: MSC 类的 Get_Max_Lun()
133439d99y5wqydmfysqqq.png.thumb.jpg

133439wk2ex7aq2vk6jde6.png.thumb.jpg
触发 CTR  中断
Setup0_Proecess –>MSC_Data_setup --> DataStageIn 即UserToPMABufferCopy

133440ywfyqqkw1jcuwbj1.png.thumb.jpg
触发 CTR  中断
In0_Process --> DataStageIn --> 数据已经发完 CS = WAIT_STATUS_OUT

133441dd6vzq95e5eu8d50.png.thumb.jpg
触发 CTR  中断
Out0_Process -->XXX_Status_Out,这里是空函数








使用特权

评论回复
elephant00|  楼主 | 2021-5-14 11:09 | 显示全部楼层
举例 2: VCP 类的 Set_LineCoding()
Setup transaction(命令)
           触发 CTR  中断
          Setup0_Proecess –>VCP_Data_setup --> CS = OUT_DATA
Out transaction (设置串口数据帧格式)
          触发 CTR  中断
          Out0_Process --> DataStageOut --> 数据全部读完 CS = WAIT_STATU_IN
In transaction (取走 0 长度数据包)
         触发 CTR  中断
In0_Process –>VCP_Status_IN,即根据数据阶段得到的帧格式来配置 USART

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 wolfe_yu 得到打赏 ¥170.00
  • 2 小叶三千 得到打赏 ¥160.00
  • 3 最美葫芦娃 得到打赏 ¥155.00
  • 4 呐咯密密 得到打赏 ¥115.00
  • 5 hk386 得到打赏 ¥80.00
  • 6 laocuo1142 得到打赏 ¥80.00
  • 7 wzx1994 得到打赏 ¥60.00
  • 8 年轻的国王 得到打赏 ¥60.00
  • 9 jlc317 得到打赏 ¥55.00
  • 10 bjs1688 得到打赏 ¥55.00
在线客服 快速回复 返回顶部 返回列表