打印
[信息]

【实战经验】STM32F103上USB的端点资源

[复制链接]
3063|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-17 14:44 编辑



【实战经验】STM32F103上USB的端点资源      
               《STM32F103上 USB的端点资源灵活使用》
前言
理解STM32F103上USB模块的端点资源,灵活在应用中的配置。

问题
某客户使用STM32F103的USB模块做设备时和上位机PC连接时碰到一个问题:PC端驱动已经固
定好,是对下位机USB设备上的地址编号为0x0A和0x0B的两个端点通信,从0x0A端点读取数据,
向0x0B端点写数据。而STM32F103的USB模块只有8个双向端点,能否支持这样的寻址。


1. 问题调研
我们先来看看STM32F103上的USB端点资源。从STM32F103参考手册(RM0008)可知,一共有8个双向端点,对应8个寄存器来控制其属性和表征其状态。如下图,可知每一对端点必须配置成相同的端点地址,这个地址位域是4位,取值从0x0到0x0F范围。



客户使用的是STSW-STM32121STM32F10x, STM32L1xx and STM32F3xx全速USB设备库),那么应该修改哪些代码呢?

2. 问题分析
首先,USB设备通过端点描述符向主机PC报告它所使用的端点有哪些:每个端点的地址(即USB规范里,以及参考手册的寄存器中规定的那4位地址域)、传输方向、传输类型、最大包长等。以STSW-STM32121库中的Mass_Storage例程为例,需要把<usb_desc.c>中的端点描述符做如下修改:
0x0A地址的端点作为IN端点(PC从它读取数据),0x0B地址的端点作为OUT端点(PC向它写数据)。



这个函数的名称是“设置(USB)设备地址”,但是其中除了最后一句是在设置USB设备的地址,前面的for循环是在设置该设备内的端点地址。
从以上绿色标注的代码段可以看到,库代码固定给1号端点”0x01”这个地址,2号端点”0x02”这个地址,以此类推。这里的”1号”、”2号”指的是端点的编号,对应的就是之前提到的8个寄存器的编号,即下图中的n=0~7。n在这里就是端点的编号。



当然如果你很任性,一定要使用编号为6和7的端点,也可以,那么代码就如下修改:




对应PDF文档:STM32F103上USB的端点资源
更多实战经验请看:【ST MCU实战经验汇总贴】







沙发
643757107| | 2015-6-25 14:27 | 只看该作者
USB设备通过端点描述符向主机PC报告它所使用的端点有哪些:每个端点的地址(即USB
规范里,以及参考手册的寄存器中规定的那4位地址域)、传输方向、传输类型、最大包长等。以
STSW-STM32121库中的Mass_Storage例程为例,需要把<usb_desc.c>中的端点描述符做如下修改:
0x0A地址的端点作为IN端点(PC从它读取数据),0x0B地址的端点作为OUT端点(PC向它写数据)。
非常好的教程,占座。

使用特权

评论回复
板凳
lanmanck| | 2017-6-15 15:30 | 只看该作者
不知所云

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17108

帖子

288

粉丝