- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32F102/103 USB USB ( )
STM32F102/103 USB USB ( )
SSTTMM3322FF110022//110033 UUSSBB UUSSBB (( ))
关于 的 模块和 库函数整理版
vigia发表于2010-11-26
今天有空,开贴讲讲,怎样配合ST提供的库函数理解STM32F102/103的USB 模块,以及
怎么调用这些库函数来实现基本的USB 通信。
题目很大,先只讲讲最简单的应用。
512 PacketBuffer
512 PacketBuffer
关于551122字节的PPaacckkeettBBuuffffeerr
在STM32F103 的USB 模块中有一个RAM区,称为Packet Buffer,共有512字节。
USB模块中有个Buffer Description Table,这个Table位于512字节的PacketBuffer
中,可以在Packet Buffer 的任意位置。
USB模块提供一个寄存器USB_BTABLE来设置Buffer DescriptionTable在Packet
Buffer的偏移地址。
在库函数中,Define 了这个偏移地址:
usb_conf.h:
#define BTABLE_ADDRESS (0x00)
这意味着BufferDescription Table位于Packet Buffer 的首地址。
在BufferDescription Table 中的,是所用到的端点的缓存区地址寄存器和缓存区长度寄存器。
所有用到的端点的这两个寄存器都位于这个Table 中。
如上所说,由于这个Table 位于PacketBuffer的首地址。所以端点0 的发送缓冲区地址寄存
器就位于PacketBuffer的首地址,紧接的是端点0 发送缓冲区长度寄存器,接着的是端点0
接收缓存区的地址寄存器,跟着是端点0 的接收缓存区的长度寄存器,等等等等,一直到最
后一个端点8 的接收缓存区的长度寄存器。
每个端点的一个方向有2 个寄存器,共8 个端点16 个方向,一共32 个寄存器,每个寄存器
为4 个字节,所以这个Table 一共占有128 字节。
在端点0 发送缓存区的地址寄存器中的值,是端点0 发送缓存区在PacketBuffer中的偏移地
址。而端点0 接收缓存区的地址寄存器中的值,是端点0 接收缓存区在PacketBuffer中的偏
移地址。
如前所说,BufferDescriptionTable 从理论上占有128 个字节。但对于具体的应用,不是每
个应用都会用到8 个端点的16 个方向的。所以,对于那些没有用到的端点寄存器,我们可
以不考虑为他们预留位置。
在ST提供的例程中,通常这么定义:
#define BTABLE_ADDRESS (0x00)
/*EP0 */
/*rx/tx bufferbase address */
#define ENDP0_RXADDR (0x18)
#define ENDP0_TXADDR (0x58)
这3句定义,意味着:
1, 端点0的接收缓存区位于Packet Buffer 的0x18地址。
2 0 Packet Buffer 0x58
, 端点 的发送缓存区位于 的 地址。
3, BufferDescription Table 位于Packet Buffer 的前24字节。24个字节意味着
应用需要使用6个寄存器,即3个端点。
4, 端点0的接收缓存区长度为64字节。
好了,关于这个PacketBuffer讲解完毕。
要做一个USB 应用,第一步就是要根据应用合理的分配好这个Packet Buffer。
出个题目给大家做做
假设,需要使用端点0 的IN,OUT 传输,端点长度为8字节,端点1 的IN 传输,长度为16
字节。端点2 的OUT 传输,长度为64 字节。端点2 的IN 传输,长度为64 字节。
该怎么分配这个PacketBuffer?
2 使用S
文档评论(0)