
1.STM32F1 USB外设在USB系统的位置0 X: [3 ]( k4 Q STM32F1 USB外设实现了USB2.0全速总线和APB1总线间的接口。看不懂的话看下图。6 Y0 y: a: d% T) C4 v& f ![]() # P' l3 A+ G1 ?. y8 P. j 2.STM32F1 USB外设功能描述 USB外设为PC主机和微控制器所实现的功能之间提供了符合USB规范的通信连接。PC主机和微控制器之间的数据传输是通过共享一专用的数据缓冲区(PMA)来完成的,该数据缓冲区能被USB外设直接访问。这块专用数据缓冲区的有效大小由所使用的端点数目和每个端点最大的数据包大小所决定,这个专用内存(PMA)大小为512字节,最多可以被16个单向或8个双向端点使用。USB模块同PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。 1 F; o4 {2 Y# X* W$ m4 s( x 也就是说16个端点每一个端点共享一个512字节的缓冲区,我们可以理解为USB HOST就是通过对这个缓冲区的读写来实现和设备的数据交互,其实原理大概就是如此。如果主机发送数据给设备,设备会把USB外设接收的数据放入缓冲区,完毕之后通知CPU读取数据了,如果主机读取USB设备的数据,CPU会把数据放到缓冲区,然后告诉USB外设可以发送数据了,USB外设会把缓冲区的数据通过总线发送给主机。 * X) H$ |& }( I. A; ^8 a2 `6 R ' n3 \4 q4 F; ~, S! b2 K% d5 T 3.STM32F1 USB外设主要特征 (1)符合USB2.0全速设备的技术规范。 (2)可配置1到8个USB双向端点,我们可以理解为8个IN端点和8个OUT端点,也就是每一个双向端点可以被配置为一个IN端点和一个OUT端点,但是这两个端点公用一个端点寄存器,两个端点的类型必须是一致的(控制端点、中断端点、批量端点、同步端点)。; e) g$ L4 |+ x9 C. C (3)外设硬件自动为每一个PID和Packet字段生成CRC效验,并和其他字段组成一个完整的USB Packet。 (4)支持控制传输、中断传输、同步传输、批量传输。0 C! ?& K" U& M0 P (5)支持同步传输和批量传输双缓冲机制,比如说我们采集ADC或者接收外部传感器的数据时必须保持数据的完整性,就可以使用双缓冲机制防止丢数。 ; W9 Q9 c' Z# l) K2 o3 S (6)支持对自己的挂起和恢复操作,可以查看USB总线电平标准、USB总线状态、USB总线信号详解博文对挂起和恢复操作进行理解。 / K" n; {, t1 Y2 w. D! N (7)帧锁定时钟脉冲生成。当收到一个SOF帧开始包,可以生成一个脉冲信号给其他模块使用,如果SOF中断使能,会进入SOF中断处理函数。6 j9 |7 D/ A# a/ `- S3 t& Z ————————————————$ |. F2 ?/ F {5 ], X' @7 g 版权声明:一个早起的程序员7 K6 B V. J7 s! X! b4 X2 x3 C+ Y) ~ 如有侵权请联系删除' |/ S# t2 K0 A 6 c7 C5 K( n* | ! J C# L+ C' `4 n1 u1 }7 h |