模块分类

  在 STM32 众多系列的 MCU 中,USB模块并不是相同的,官方称呼为USB IP 不同。总的来说可以分文两大类:USB IP、OTG IP。这两种 IP又可以进行更进一步的细分,如下图:

上图中罗列的芯片并不是很全面,某些新系列的芯片可能与上图有出入。各IP的主要区别如下:

  • USB IP:
  • 仅可作为全速或低速的USB设备;
  • 符合USB2.0中的全速规范
  • 可用资源:8个双向可配置端点
  • 512字节 的专用数据包缓冲存储器SRAM
  • CRC(循环冗余校验)生成/校验,反向不归零(NRZI)编码/解码和位填充
  • 支持四种传输类型:对于bulk和同步传输,还支持double buffer模式;使得一个buffer用于USB硬件和PC
    交换数据的同时,另外一个buffer可被MCU使用
  • 支持USB设备的挂起和唤醒操作(写控制寄存器),从而停止设备时钟,以进入低功耗模式

    F102/103中的USB和CAN共享512字节的专用SRAM来进行数据收发操作,因此两个IP不能同时使用
  • USB+ IP: 是针对USB IP的扩展版本,同样仅可作为全速或低速的USB设备,但是ST针对这部分的USB模块进行了扩展,例如添加了USB低功耗管理等。除了以上USB IP特性外,还有如下:
  • 1024字节 的专用数据包缓冲存储器SRAM
  • 同步传输支持
  • USB 2.0 Link电源管理支持
  • 电池充电规范修订版1.2支持
  • USB连接/断开功能(USB_DP线上可控嵌入式上拉电阻)
  • FS OTG IP: 可作为全速和低速USB主机;可作为全速USB设备
  • HS OTG IP: 可作为高速、全速和低速USB主机;可作为高速和全速USB设备

    无论以上哪种 IP,其全部符合USB 2.0规范。

Packet buffer的使用

  Packet buffer存在于USB IPUSB+ IP中(在 OTG IP中称为FIFO),其用法是一致的。每个双向端点对应两个packet buffer,分别用于发送和接收。软件通过packet buffer interface来访问它们。
  这些packet buffer的位置和大小都可配置,由***buffer描述表***指定 ,Buffer描述表本身也在这块memory里,它自己的地址是由USB_BTABLE寄存器指定的。Table里每个entry由4个半字组成(分别表示双向EP的接收packet和发送packet的位置和大小) 因此***该table的位置本身必须以8字节对齐***,即USB_BTABLE的低三位全部为0。
  USB外设硬件不会把本EP的数据溢出到与其相邻的其他packet 如果收到的数据多于buffer的长度,则只把前length个数据放到该EP对应的Packet buffer中。

在ST给出的驱动中,各端点的初始化情况如下:

  • 硬件发送缓冲区
  • 在初始化时设定各个EP硬件发送缓冲区的起始地址 @ADDRn_TX@硬件缓冲描述表
  • 在准备好要发送的数据后,设置发送长度@COUNTn_TX@硬件缓冲描述表
  • 硬件接收缓冲区
  • 在初始化时设定各个EP硬件接收缓冲区的起始地址 @ADDRn_RX@硬件缓冲描述表
  • 在初始化时设定各个EP硬件接收缓冲区的长度 @COUNTn_RX的高位@硬件缓冲描述表,以允许接收缓冲区的溢出检测;一般都是接收EP的最大包长
  • 在收到数据并产生ISR中,从硬件接收缓存读取数据之前先要看收到了多少数据(实际收到的数据不一定填满接收缓存的)

FIFO的使用

  存在于 OTG IP中。使用相对来说要复杂不少。

驱动程序

  在实际使用中,发现USB驱动有许多bug,需要特殊注意!关于这部分请参考针对USB部分的独立博文。无论是标准外设库版还是HAL库版,ST官方有针对各BUG的独立说明文档,这个在做具体移植时需要特殊注意。

标准外设库版(官方培训文档称为 Legacy library

  针对不同的芯片有不同的独立版本驱动(主要是USB IP是有区别的)。目前有如下几个:

STSW-STM32046: 主要是针对STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library,对应的说明文档为UM1021。下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32046.html ,该版本的驱动 最新版本为 2.2.1
  实现的设备例程:AUDIO、DFU、HID、MSC、VCP、Dual Core(FS IP和HS IP同时工作,分别实现MSC和HID设备)
  实现的主机例程:MSC、HID、Dual Core(FS IP和HS IP同时工作,分别实现MSC和HID主机功能)
  实现的双角色例程:DRD(根据插入电缆的不同,分别作MSC主机和MSC设备功能)
STSW-STM32121: 主要是针对STM32F10x, STM32L1xx and STM32F3xx USB full speed device library,对应的说明文档为UM0424。
下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32121.html ,该版本的驱动 最新版本为 4.1.0
  实现的例程(只能是Device):Audio_Speaker、DFU、MSC、Joystick、Custom_HID、VCP、MSC+HID 复合设备
STSW-STM32092: 主要是针对STM32F0x2xx USB FS device library,对应的说明为UM1717。下载地址为 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32092.html, 该版本驱动的 最新版本为 1.0.0这里需要注意,该驱动是针对STM32F0x2xx的,但是可以非常方便的移植到STM32F0xx系列得MCU中。 需要根据具体芯片的时钟,修改驱动的usb_conf.h和usb_bsp.c。关于具体的移植可参考网友的该文章USB库STM32F0x2移植到STM32F070笔记
  实现的例程(只能是Device):Audio_Speaker、CCID、MSC、Custom_HID、HID、HID_LPM_test、DFU、Virtual_COM_Port、CDC+HID复合设备、MSC+HID复合设备

  该版本的驱动不但可以非常方便的与之前的标准外设库一同使用,而且可以非常方便的与 HAL 库一起使用。 博文STM32之标准外设版USB驱动+MSC(Host)+Fatfs移植 就是使用的HAL外设库+标准外设库版的USB驱动的移植。使用标准外设库版版USB库的主要原因是,该版本的USB库经过多年验证,相对稳定!而在使用HAL版USB库时,发现了许多BUG。
  以上这些驱动在ST官网一次次改版之后,已经非常难找到!我记得在之前都不需要登陆就可以下载,现在还必须登陆才可以下载!

HAL库版(官方培训文档称为 Cube library

  从目前的情况来看,ST已经彻底放弃了之前用了很久的标准外设库,全面转投 STM32CubeTM。在驱动程序方面,标准外设库也基本不再维护更新!
  STM32CubeTM系列的驱动相比较标准外设库来说更将全面,同样USB驱动也比标准外设库更加全面。这部分驱动一般很少手动来移植处理,直接使用STM32CubeMX工具来处理。
  不同芯片的USB驱动均包含在针对各芯片的独立Cube驱动包中。其中的USB驱动或多好少回有点区别,也可能没有区别。具体可直接查看Cube驱动包的驱动说明。总结一下:

上图由于比较早,其中部分芯片没有列出。

配套工具

  ST为开发者提供了一些常用的工具,具体如下:

  • PC端VCP驱动(STSW-STM32102): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257938
  • DFU PC端程序(STSW-STM32080): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916
  • HID PC端程序(STSW-STM32084): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257920

参考

  ST 的各种培训资料

STM32 之六 USB IP(USB模块)、官方驱动版本 详解相关推荐

  1. usb转ttl模块与matlab,图文详解USB转TTL设备与电路板的连接

    描述 USB转TTL的硬件设备: USB转TTL主机一台; 芯片选用PL-2303HX USB转TTL刷机线,采用进口PL2303HX芯片.连接上电脑并安装驱动后,电脑即扩展出一个COM3或COM4. ...

  2. usb转ttl模块与matlab,图文详解USB转TTL 与电路板的连接

    USB转TTL的硬件设备: USB转TTL主机一台; 芯片选用PL-2303HX USB转TTL刷机线,采用进口PL2303HX芯片.连接上电脑并安装驱动后,电脑即扩展出一个COM3或COM4.... ...

  3. STM32 PWM输出原理和直流电机PWM驱动原理详解及例程

    这次讲一讲STM32输出PWM的原理以及PWM可以作为信号传输数据的原理. PWM会有很多地方用到,有控制灯的亮度,控制电机,控制舵机或者其他一些外设,有时候你的单片机所输出的PWM是作为信号去控制, ...

  4. 对象式单片机外部模块驱动编写详解——DAC8552为例

    对象式单片机外部模块驱动编写详解--DAC8552为例 对象式驱动原理 DAC8552基本介绍 DAC8552驱动抽象 源码文件及其解释 参考资料 具体的代码和例程请参照以下GitHub仓库,记得给我 ...

  5. 集成式单片机外部模块驱动编写详解——AD5689为例

    集成式单片机外部模块驱动编写详解--AD5689为例 集成式驱动原理 AD5689基本介绍 AD5689驱动抽象及源码解释 源码 参考资料 具体的代码和例程请参照以下GitHub仓库,记得给我star ...

  6. python中selenium模块驱动谷歌详解

    python中selenium模块驱动谷歌详解 Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中 ...

  7. linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt

    PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...

  8. 《Linux设备驱动开发详解 A》一一2.3 接口与总线

    本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...

  9. 《Linux设备驱动开发详解(第2版)》隆重出版

    Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图     基本信息 * 作者: 宋宝华       * 出版社:人民邮电出版社     * ISBN:97 ...

最新文章

  1. 单片机从事什么工作?只会51单片机能找到工作吗?
  2. mybatis 中#与$的区别
  3. 直播系统搭建关键步骤与要点!
  4. [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)
  5. 前端学习(542):node得环境搭建
  6. Java核心(五)深入理解BIO、NIO、AIO
  7. ionic 去掉启动页的加载动画 菊花转
  8. 基本Linux命令的用法
  9. python模块相互引用_python中如何相互引用两个包中的模块
  10. Python Tricks(十一)—— 阶乘的实现
  11. hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)
  12. xshell5 可用注册码
  13. 数学建模入门-matlab实现偏微分方程数值解
  14. 信息学奥赛一本通(1079:计算分数加减表达式的值)
  15. vue 集成环信 web im 加 一对一视频通话
  16. 计算机制图和应用cad哪个好,cad制图笔记本电脑排行,cad制图用哪款笔记本电脑好...
  17. C语言经典实例006:输出一个正方形
  18. 刘强东,揭开京东未来盈利迷局
  19. 计算机ctrl加的功能,电脑截图快捷键ctrl加什么键
  20. Option3X 5G 全网部署(基于 IUV_5G 软件)

热门文章

  1. HP G9 服务器系统安装注意事项
  2. 在线分享 Hosts 规则工具:Remote Hosts Server
  3. Python代码质量:工具和最佳实践
  4. [医疗信息化][DICOM教程]DICOM标准简介
  5. Postman测试导入/解析excel接口的方法
  6. 30w 重金等你挑战,数字合肥广邀智慧城市建设英才
  7. microsoft WINDOWS 系统错误代码
  8. php微信公众号开发之快递查询
  9. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律
  10. 宜昌开启新型智慧城市3.0 构建一体化建设新模式