Crazyflie 2.0学习周报18-6:STM32之USB串口通信[Universal Serial Bus](二)

本文详细介绍了STM32的USB串口通信,重点讲解了分组缓冲区的结构和用途,端点初始化步骤,以及IN和OUT分组的处理。在IN分组中,阐述了如何进行数据发送,包括数据的读取、传输和中断处理。对于OUT和SETUP分组,讨论了数据接收过程和控制传输的三个阶段。此外,还提到了双缓冲端点的管理,以实现高效的数据传输和避免冲突。
摘要由CSDN通过智能技术生成

1.分组缓冲区的结构和用途

每个双向端点都可以接收或发送数据。接收到的数据存储在该端点指定的专用缓冲区内,而另一个缓冲区则用于存放待发送的数据。 对这些缓冲区的访问由分组缓冲区接口模块实现, 它提出缓冲区访问请求,并等待确认信息后返回。 为防止产生微控制器与USB模块对缓冲区的访问冲突,缓冲区接口模块使用仲裁机制,使APB1总线的一半周期用于微控制器的访问,另一半保证USB模块的访问。

每个端点对应于两个分组缓冲区(一般一个用于发送,另一个用于接收)。这些缓冲区可以位于整个分组存储区的任意位置,因为它们的地址和长度都定义在缓冲区描述表中,而缓冲区描述表也同样位于分组缓冲区中,其地址由寄存器确定。缓冲区描述表的每个表项都关联到一个端点寄存器,它由4个16位的字组成,因此缓冲区描述表的起始地址按8字节对齐(寄存器的最低3位总是’000’)。
在这里插入图片描述

2.端点初始化

初始化端点的第一步是把适当的值写到ADDRn_TX或ADDRn_RX寄存器中,以便USB模块能找到要传输的数据或准备好接收数据的缓冲区。USB_EpnR寄存器的EP_TYPE位确定端点的基本类型,EP_KIND位确定端点的特殊特性。
作为发送方,需要设置USB_EpnR寄存器的STAT_TX位来使能端点,并配置COUNTn_TX位决定发送长度。
作为接收方,需要设置STAT_RX位来使能端点,并且设置BL_SIZE和NUM_BLOCK位,确定接收缓冲区的大小,以检测缓冲区溢出的异常。
对于非同步非双缓冲批量传输的单向端点,只需要设置一个传输方向上的寄存器。一旦端点被使能,应用程序就不能再修改USB_EpnR寄存器的值和ADDRn_TX / ADDRn_RX, COUNTn_TX / COUNTn_RX所在的位置,因为这些值会被硬件实时修改。当数据传输完成时,CTR中断会产生,此时上述寄存器可以被访问,并重新使能新的传输。

3.IN分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值