用户工具

站点工具


icore3_arm_hal_18
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-04-16 gingko 初次建立






STM32CubeMX教程十八——USB_CDC实验

1. 新建工程:在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR  2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。  3. 配置RCC,使用外部时钟源  4. 配置调试引脚  5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output  6. 引脚模式配置  7. 时钟源设置,选择外部高速时钟源,配置为最大主频  8. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5  9. 点击Code Generator,进行进一步配置

  • Copy all used libraries into the project folder
  • 将HAL库的所有.C和.H都复制到所建工程中
    • 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便
    • 缺点:体积大,编译时间很长
  • Copy only the necessary library files
  • 只复制所需要的.C和.H(推荐)
    • 优点:体积相对小,编译时间短,并且工程可复制拷贝
    • 缺点:新增外设时需要重新用STM32CubeMX导入
  • Add necessary library files as reference in the toolchain project configuration file
  • 不复制文件,直接从软件包存放位置导入.C和.H
    • 优点:体积小,比较节约硬盘空间
    • 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径

自行选择方式即可

10. 然后点击GENERATE CODE 创建工程  创建成功,打开工程。





实验十八:USB_CDC实验——高速数据传输

一、 实验目的与意义

  1. 了解STM32 USB 结构。
  2. 了解STM32 USB 特征。
  3. 掌握USB的使用方法。
  4. 掌握KEIL MDK 集成开发环境使用方法。

二、 实验设备及平台

  1. iCore3 双核心板。点击购买
  2. JLINK(或相同功能)仿真器。点击购买
  3. Micro USB线缆。
  4. Keil MDK 开发平台。
  5. STM32CubeMX开发平台。
  6. 装有WIN XP(及更高版本)系统的计算机。

三、 实验原理

1、USB简介

  • USB,是英文UniversalSerialBUS(通用串行总线)的缩写,而其中文简称为“通串线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
  • USB发展到现在已经有USB1.0/1.1/2.0/3.0等多个版本。目前用的最多的就是USB1.1和USB2.0,USB3.0目前已经开始普及。STM32F407自带的USB符合USB2.0规范。
  • 标准USB共四根线组成,除VCC/GND外,另外为D+和D-,这两根数据线采用的是差分电压的方式进行数据传输的。在USB主机上,D-和D+都是接了15K的电阻到地的,所以在没有设备接入的时候,D+、D-均是低电平。而在USB设备中,如果是高速设备,则会在D+上接一个1.5K的电阻到VCC,而如果是低速设备,则会在D-上接一个1.5K的电阻到VCC。这样当设备接入主机的时候,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。

2、USB On-The-Go简介

  • OTG_HS 是一个双角色设备 (DRD) 控制器,同时支持从机和主机功能,并且完全符合 USB 2.0 规范的 On-The-Go 补充标准。此外,该控制器也可配置为仅主机或仅从机控制器,完全符合 USB 2.0 规范。在主机模式中,OTG_HS 支持高速(HS,480 Mbits/s)、全速(FS,12 Mbits/s)和低速(LS,1.5 Mbits/s)传输,而在从机模式中,仅支持高速(HS,480 Mbits/s)和全速(FS、12 Mbits/s)传输。OTG_HS 还支持 HNP 和 SRP。OTG 模式下需要的唯一外部设备是提供 VBUS 的电荷泵。
  • OTG主要特性可分为三类:通用特性、主机模式特性和从机模式特性。
  • 1、通用特性
    • OTG_HS接口的通用特性如下:
      • 经USB-IF认证,符合通用串行总线规范第2.0版
      • OTGHS支持以下三个PHY接口:
        • 片上全速PHY
        • 连接外部全速PHY的I2C接口
        • 连接外部高速PHY的ULPI接口
      • 支持主机协商协议 (HNP) 和会话请求协议 (SRP)
        • 在 OTG 应用中允许主机关闭 VBUS 以节省功耗,而不需要外部组件
        • 允许使用内部比较器来监视 VBUS 电平
        • 支持主机和从机之间的动态角色切换
        • 可通过软件配置为以下角色:
          • 支持 SRP 的 USB HS/FS 从机(B 器件)
          • 支持 SRP 的 USB HS/FS/LS 主机(A 器件)
        • 支持 HS/FS SOF 以及低速 (LS)“Keep-alive”令牌并具有如下功能:
          • SOF 脉冲引脚输出功能
          • SOF 脉冲与定时器 2 (TIM2) 的内部连接
          • 可配置的帧周期
          • 可配置的帧结束中断
        • 模块内嵌 DMA,并可软件配置 AHB 的突发传输类型
        • 具备省电功能,例如在 USB 挂起期间停止系统时钟,关闭数字模块内部时钟域、PHY 和DFIFO 电源管理
        • 具有包含高级 FIFO 管理的专用 4K 字节数据 RAM:
          • 可以将存储区配置为不同 FIFO,以便灵活高效地使用 RAM
          • 每个FIFO 可包含多个数据包
          • 动态地进行存储器分配
          • FIFO 大小可配置为 2 的幂以外的值,以便连续使用存储区
        • 一帧之内可以无需要应用程序干预,以达到最大 USB 带宽
  • 2、主机模式特性
    • 主机模式下的 OTG_HS 接口特征如下:
      • 需要外部电荷泵来生成 VBUS
      • 具有多达 12 个主机通道(管道),每个通道可动态地进行重新配置,可支持任何类型的
    • USB 传输
      • 内置硬件调度器:
        • 在周期性硬件队列中存储多达 8 个中断加同步传输请求
        • 在非周期性硬件队列中存储多达 8 个控制加批量传输请求
        • 管理一个共享 RX FIFO、一个周期性 TX FIFO 和一个非周期性 TX FIFO,以有效使用
    • USB 数据 RAM
      • 在主机模式下具备对 SOF 帧周期进行动态调校的功能
  • 3、从机模式特性
    • OTG_HS 接口在从机模式下具有以下特性:
      • 具有 1 个双向控制端点 0
      • 具有 5 个 IN 端点 (EP),可配置为支持批量、中断或同步传输
      • 具有 5 个 OUT 端点,可配置为支持批量、中断或同步传输
      • 管理一个共享 Rx FIFO 和一个 Tx-OUT FIFO,可高效使用 USB 数据 RAM
      • 管理多达 6 个专用 Tx-IN FIFO(每个 IN 配置的 EP 使用一个)以降低应用程序负载
      • 具备软断开功能

3、高速OTG框图

  • USB OTG HS 模块嵌入了一个 ULPI 接口以连接外部 HS PHY。

4、USB CLASS

  • USB协议设计的时候,把鼠标,键盘,大容量存储,图像等,这些之前是通过其他接口所实现的,各种的功能,都囊括进来。并且在协议中有对应的规范定义,支持这些功能。因此,制定了各种USB的Clas,即分类,根据功能而分出的各种类别。不同的Class分类,用于实现对应的功能,适用于相应的设备。
  • 常见的USB类设备:
    1. 音频类
    2. 通信设备类
    3. 人机接口设备类
    4. 物理设备
    5. 成像设备类
    6. 打印机设备类
    7. 大容量存储类
    8. 数据接口类
    9. 智能卡设备类
    10. 内容安全设备类
    11. 视频设备类
    12. 个人医疗保健设备类
    13. USB音频/视频(AV)设备类
    14. Billboard Device Class Specification
    15. USB Type-C桥接器件类
    16. 无线控制类
    17. 其他设备
    18. 特定应用
    19. 厂商自定义

5、USB_CDC类简介

  • 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_CDC类入门培训》。

6、USB_CDC类简介

  • 实现原理
  • iCore3中使用的STM32F407IGTx芯片带有USB高速物理层,通过外部高速PHY的ULPI接口外接USB3300设备芯片实现USB_CDC设备物理层搭建。连接示意图如下:

四、 实验程序

1. 主函数

int main(void)  
{  
    int i;  
    static unsigned char data_number = 0;  
    HAL_Init();  
    USBD_Init(&USB_OTG_dev,USB_OTG_HS_CORE_ID,&USR_desc,&USBD_CDC _cb,&USR_cb);  
    SystemClock_Config();  
    MX_GPIO_Init();  
    while(State==0);  
    LED_RED_ON;  
    while (1)  
    {  
        if(USB_ReceivedCount > 0){  
            LED_RED_ON;   
            USB_ReceivedCount = 0;  
            data_number = USB_Rx_Buffer[0];  
            do{  
                USB_StatusDataSended = 0;  
                DCD_EP_Tx(&USB_OTG_dev,CDC_IN_EP,gImage_flower,sizeof(gImage_flower));  
                while(USB_StatusDataSended == 0){  
                    for(i = 0;i < 10000;i++);  
                }  
                data_number--;  
            }while(data_number > 0);  
            LED_RED_OFF;  
         }  
    }
}  

2. 中断函数

void OTG_HS_IRQHandler(void)  
{  
  USBD_OTG_ISR_Handler (&USB_OTG_dev);  
}  
void OTG_HS_EP1_IN_IRQHandler(void)  
{  
  USBD_OTG_EP1IN_ISR_Handler (&USB_OTG_dev);  
}  
void OTG_HS_EP1_OUT_IRQHandler(void)  
{  
  USBD_OTG_EP1OUT_ISR_Handler (&USB_OTG_dev);  
}

3. USB驱动移植

  • 在CUBEMX中 无法配置USBDevice为CDC高速传输模式,需要将USB库的驱动文件移植到程序中去。建立好一个新的工程后,打开此实验例程文件夹,找到USB文件夹,将文件夹拷贝到建立好的新的工程中去。

五、 实验步骤

  1. 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把跳线帽插在USBOTG;
  3. 把iCore3(USB_OTG)通过Micro USB线与计算机相连,为iCore3供电;
  4. 打开Keil MDK开发环境,并打开本实验工程;
  5. 烧写程序到iCore3;
  6. 打开usb_hid.exe进行验证。

六、 实验现象

  • 绿色LED点亮,结果如下:

附录:

  • 1、打开设备管理器,并找到USB_CDC设备

  • 2、选中此设备并右击选择更新驱动程序,选中浏览计算机以查找驱动程序软件

  • 3、找到例程文件夹下driver文件夹并选中此文件夹,点击下一步后,驱动程序将会自动安装。

  • 4、安装成功后,设备管理器将会显示相对应的设备。

icore3_arm_hal_18.txt · 最后更改: 2022/03/18 15:08 由 sean