用户工具

站点工具


icore3_arm_hal_18

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore3_arm_hal_18 [2020/04/16 16:04]
fmj
icore3_arm_hal_18 [2022/03/18 15:08] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801** ​ ||| |技术支持电话|**0379-69926675-801** ​ |||
 |技术支持邮件|Gingko@vip.163.com ​ ||| |技术支持邮件|Gingko@vip.163.com ​ |||
-|技术论坛|http://​www.eeschool.org ​ ||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-04-16 ​ |  gingko ​ |  初次建立 ​ | |  V1.0  |  2020-04-16 ​ |  gingko ​ |  初次建立 ​ |
 +\\
 +\\
 +\\
 +\\
 +\\
  
 ===== STM32CubeMX教程十八——USB_CDC实验 ===== ===== STM32CubeMX教程十八——USB_CDC实验 =====
  
 1. 新建工程:在主界面选择File-->​New Project ​  ​或者直接点击ACCEE TO MCU SELECTOR  ​ 1. 新建工程:在主界面选择File-->​New Project ​  ​或者直接点击ACCEE TO MCU SELECTOR  ​
-{{ :icore3:icore3_cube_11_1.png?direct | }}+{{ :icore3:icore3_cube_18_1.png?direct | }}
 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置
 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。
-{{ :icore3:icore3_cube_11_2.png?direct | }}+{{ :icore3:icore3_cube_18_2.png?direct | }}
 3. 配置RCC,使用外部时钟源 3. 配置RCC,使用外部时钟源
-{{ :icore3:icore3_cube_11_3.png?direct | }}+{{ :icore3:icore3_cube_18_3.png?direct | }}
 4. 配置调试引脚 4. 配置调试引脚
-{{ :icore3:icore3_cube_11_4.png?direct | }}+{{ :icore3:icore3_cube_18_4.png?direct | }}
 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output
-{{ :icore3:icore3_cube_11_5.png?direct | }}+{{ :icore3:icore3_cube_18_5.png?direct | }}
 6. 引脚模式配置 6. 引脚模式配置
-{{ :icore3:icore3_cube_11_6.png?direct | }}+{{ :icore3:icore3_cube_18_6.png?direct | }}
 7. 时钟源设置,选择外部高速时钟源,配置为最大主频 7. 时钟源设置,选择外部高速时钟源,配置为最大主频
-{{ :icore3:icore3_cube_11_7.png?direct | }}+{{ :icore3:icore3_cube_18_7.png?direct | }}
 8. 工程文件的设置,​ 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK5 8. 工程文件的设置,​ 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK5
-{{ :icore3:icore3_cube_11_8.png?direct | }}+{{ :icore3:icore3_cube_18_8.png?direct | }}
 9. 点击Code Generator,进行进一步配置 9. 点击Code Generator,进行进一步配置
-{{ :icore3:icore3_cube_11_9.png?direct | }}+{{ :icore3:icore3_cube_18_9.png?direct | }}
   * **Copy all used libraries into the project folder**   * **Copy all used libraries into the project folder**
   * 将HAL库的所有.C和.H都复制到所建工程中   * 将HAL库的所有.C和.H都复制到所建工程中
行 42: 行 46:
  
 10. 然后点击GENERATE CODE  创建工程 10. 然后点击GENERATE CODE  创建工程
-{{ :icore3:icore3_cube_10_10.png?direct | }}+{{ :icore3:icore3_cube_18_10.png?direct | }}
 创建成功,打开工程。 创建成功,打开工程。
  
行 90: 行 94:
         * 可通过软件配置为以下角色:         * 可通过软件配置为以下角色:
           * 支持 SRP 的 USB HS/FS 从机(B 器件)           * 支持 SRP 的 USB HS/FS 从机(B 器件)
-          * 支持 SRP 的 USB HS/FS/LS 主机(A 器件) 
           * 支持 SRP 的 USB HS/FS/LS 主机(A 器件)           * 支持 SRP 的 USB HS/FS/LS 主机(A 器件)
         * 支持 HS/FS SOF 以及低速 (LS)“Keep-alive”令牌并具有如下功能:         * 支持 HS/FS SOF 以及低速 (LS)“Keep-alive”令牌并具有如下功能:
行 127: 行 130:
       * 具备软断开功能       * 具备软断开功能
 === 3、高速OTG框图 === === 3、高速OTG框图 ===
- 
   * USB OTG HS 模块嵌入了一个 ULPI 接口以连接外部 HS PHY。   * USB OTG HS 模块嵌入了一个 ULPI 接口以连接外部 HS PHY。
 +{{ :​icore3:​icore3_arm_hal_18_1.png?​direct |}}
 === 4、USB CLASS === === 4、USB CLASS ===
   * USB协议设计的时候,把鼠标,键盘,大容量存储,图像等,这些之前是通过其他接口所实现的,各种的功能,都囊括进来。并且在协议中有对应的规范定义,支持这些功能。因此,制定了各种USB的Clas,即分类,根据功能而分出的各种类别。不同的Class分类,用于实现对应的功能,适用于相应的设备。   * USB协议设计的时候,把鼠标,键盘,大容量存储,图像等,这些之前是通过其他接口所实现的,各种的功能,都囊括进来。并且在协议中有对应的规范定义,支持这些功能。因此,制定了各种USB的Clas,即分类,根据功能而分出的各种类别。不同的Class分类,用于实现对应的功能,适用于相应的设备。
  
   * 常见的USB类设备:   * 常见的USB类设备:
-  ​- 音频类 +    ​- 音频类 
-  - 通信设备类 +    - 通信设备类 
-  - 人机接口设备类 +    - 人机接口设备类 
-  - 物理设备 +    - 物理设备 
-  - 成像设备类 +    - 成像设备类 
-  - 打印机设备类 +    - 打印机设备类 
-  - 大容量存储类 +    - 大容量存储类 
-  - 数据接口类 +    - 数据接口类 
-  - 智能卡设备类 +    - 智能卡设备类 
-  - 内容安全设备类 +    - 内容安全设备类 
-  - 视频设备类 +    - 视频设备类 
-  - 个人医疗保健设备类 +    - 个人医疗保健设备类 
-  - USB音频/​视频(AV)设备类 +    - USB音频/​视频(AV)设备类 
-  - Billboard Device Class Specification +    - Billboard Device Class Specification 
-  - USB Type-C桥接器件类 +    - USB Type-C桥接器件类 
-  - 无线控制类 +    - 无线控制类 
-  - 其他设备 +    - 其他设备 
-  - 特定应用 +    - 特定应用 
-  - 厂商自定义+    - 厂商自定义
 {{ :​icore3:​icore3_arm_hal_18_2.png?​direct |}} {{ :​icore3:​icore3_arm_hal_18_2.png?​direct |}}
 === 5、USB_CDC类简介 === === 5、USB_CDC类简介 ===
-  * USB2.0标准下定义了很多子类,有音频类,CDC类,HID,打印,大容量存储类,HUB,智能卡等等,这些在usb.org官网上有具体的定义,这里主要介绍通信类CDC。CDC(Communication Device Class)类 是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示:+  * USB2.0标准下定义了很多子类,有音频类,CDC类,HID,打印,大容量存储类,HUB,智能卡等等,这些在usb.org官网上有具体的定义,这里主要介绍通信类CDC。CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示:
   * USB CDC类的通信部分主要包含三部分:枚举过程、虚拟串口操作和数据通信。其中虚拟串口操作部分并不一定强制需要,因为若跳过这些虚拟串口的操作,实际上USB依然是可以通信的,这也就是为什么下图中,在操作虚拟串口之前会有两条数据通信的数据。之所以会有虚拟串口操作,主要是我们通常使用PC作为Host端,在PC端使用一个串口工具来与其进行通信,PC端的对应驱动将其虚拟成一个普通串口,这样一来,可以方便PC端软件通过操作串口的方式来与其进行通信,但实际上,Host端与Device端物理上是通过USB总线来进行通信的,与串口没有关系,这一虚拟化过程,起决定性作用的是对应驱动,包含如何将每一条具体的虚拟串口操作对应到实际上的USB操作。需要注意的是,Host端与Device端的USB通信速率并不受所谓的串口波特率影响,它就是标准的USB2.0全速(12Mbps)速度,实际速率取决于总线的实际使用率、驱动访问USB外设有效速率(两边)以及外部环境对通信本身造成的干扰率等因素组成。   * USB CDC类的通信部分主要包含三部分:枚举过程、虚拟串口操作和数据通信。其中虚拟串口操作部分并不一定强制需要,因为若跳过这些虚拟串口的操作,实际上USB依然是可以通信的,这也就是为什么下图中,在操作虚拟串口之前会有两条数据通信的数据。之所以会有虚拟串口操作,主要是我们通常使用PC作为Host端,在PC端使用一个串口工具来与其进行通信,PC端的对应驱动将其虚拟成一个普通串口,这样一来,可以方便PC端软件通过操作串口的方式来与其进行通信,但实际上,Host端与Device端物理上是通过USB总线来进行通信的,与串口没有关系,这一虚拟化过程,起决定性作用的是对应驱动,包含如何将每一条具体的虚拟串口操作对应到实际上的USB操作。需要注意的是,Host端与Device端的USB通信速率并不受所谓的串口波特率影响,它就是标准的USB2.0全速(12Mbps)速度,实际速率取决于总线的实际使用率、驱动访问USB外设有效速率(两边)以及外部环境对通信本身造成的干扰率等因素组成。
-{{ :​icore3:​icore3_arm_hal_18_3.png?​direct |}} 
-{{ :​icore3:​icore3_arm_hal_18_4.png?​direct |}} 
   * USB_CDC类详细内容可参考《USB_CDC类入门培训》。   * USB_CDC类详细内容可参考《USB_CDC类入门培训》。
 +{{ :​icore3:​icore3_arm_hal_18_3.png?​direct&​700 |}}
 +{{ :​icore3:​icore3_arm_hal_18_4.png?​direct&​700 |}}
 +
  
 === 6、USB_CDC类简介 === === 6、USB_CDC类简介 ===
-  * 实现原理+  ​* **实现原理**
   * iCore3中使用的STM32F407IGTx芯片带有USB高速物理层,通过外部高速PHY的ULPI接口外接USB3300设备芯片实现USB_CDC设备物理层搭建。连接示意图如下:   * iCore3中使用的STM32F407IGTx芯片带有USB高速物理层,通过外部高速PHY的ULPI接口外接USB3300设备芯片实现USB_CDC设备物理层搭建。连接示意图如下:
- +{{ :​icore3:​icore3_arm_hal_18_5.png?​direct&​550 ​|}}
-{{ :​icore3:​icore3_arm_hal_18_5.png?​direct |}}+
  
 ==== 四、 实验程序 ==== ==== 四、 实验程序 ====
行 218: 行 220:
 === 3. USB驱动移植 ===  === 3. USB驱动移植 === 
   * 在CUBEMX中 无法配置USBDevice为CDC高速传输模式,需要将USB库的驱动文件移植到程序中去。建立好一个新的工程后,打开此实验例程文件夹,找到USB文件夹,将文件夹拷贝到建立好的新的工程中去。   * 在CUBEMX中 无法配置USBDevice为CDC高速传输模式,需要将USB库的驱动文件移植到程序中去。建立好一个新的工程后,打开此实验例程文件夹,找到USB文件夹,将文件夹拷贝到建立好的新的工程中去。
-{{ :​icore3:​icore3_arm_hal_18_6.png?​direct |}}+{{  :​icore3:​icore3_arm_hal_18_6.png?​direct&​800  ​|}} 
 ==== 五、 实验步骤 ==== ==== 五、 实验步骤 ====
   - 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连);   - 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连);
行 228: 行 231:
  
 ==== 六、 实验现象 ==== ==== 六、 实验现象 ====
-{{ :​icore3:​icore3_arm_hal_18_7.png?​direct |}} 
   * 绿色LED点亮,结果如下:   * 绿色LED点亮,结果如下:
 +{{ :​icore3:​icore3_arm_hal_18_7.png?​direct |}}
 **附录:** **附录:**
   * 1、打开设备管理器,并找到USB_CDC设备   * 1、打开设备管理器,并找到USB_CDC设备
icore3_arm_hal_18.1587024281.txt.gz · 最后更改: 2020/04/16 16:04 由 fmj