银杏科技有限公司旗下技术文档发布平台 |
技术支持电话 | 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都复制到所建工程中
Copy only the necessary library files
只复制所需要的.C和.H(推荐)
Add necessary library files as reference in the toolchain project configuration file
不复制文件,直接从软件包存放位置导入.C和.H
自行选择方式即可
10. 然后点击GENERATE CODE 创建工程
创建成功,打开工程。
实验十八:USB_CDC实验——高速数据传输
一、 实验目的与意义
了解STM32 USB 结构。
了解STM32 USB 特征。
掌握USB的使用方法。
掌握KEIL MDK 集成开发环境使用方法。
二、 实验设备及平台
-
-
Micro USB线缆。
Keil MDK 开发平台。
STM32CubeMX开发平台。
装有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简介
2、主机模式特性
主机模式下的 OTG_HS 接口特征如下:
USB 传输
内置硬件调度器:
在周期性硬件队列中存储多达 8 个中断加同步传输请求
在非周期性硬件队列中存储多达 8 个控制加批量传输请求
管理一个共享 RX FIFO、一个周期性 TX FIFO 和一个非周期性 TX FIFO,以有效使用
USB 数据 RAM
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框图
4、USB CLASS
常见的USB类设备:
音频类
通信设备类
人机接口设备类
物理设备
成像设备类
打印机设备类
大容量存储类
数据接口类
智能卡设备类
内容安全设备类
视频设备类
个人医疗保健设备类
USB音频/视频(AV)设备类
Billboard Device Class Specification
USB Type-C桥接器件类
无线控制类
其他设备
特定应用
厂商自定义
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类简介
四、 实验程序
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驱动移植
五、 实验步骤
把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连);
把跳线帽插在USBOTG;
把iCore3(USB_OTG)通过Micro USB线与计算机相连,为iCore3供电;
打开Keil MDK开发环境,并打开本实验工程;
烧写程序到iCore3;
打开usb_hid.exe进行验证。
六、 实验现象