联系方式
地 址:深圳市龙岗区南湾街道平吉大道1号建昇大厦B栋1605号(李朗软件园对面)
联系人:周工
电 话:0755-88820678
传 真:
信 箱:498187676@qq.com
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-STM32121(STM32F10x, STM32L1xx and STM32F3xx 全速USB设备库),那么应该修改哪些代码呢?

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

返回顶部