STM32F4全速USB虚拟串口VCP程序裁剪教程

合集下载

奋斗STM32开发板Tiny NRF24L01转USB虚拟串口例程手册

奋斗STM32开发板Tiny NRF24L01转USB虚拟串口例程手册

奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验NRF24L01+转 USB 虚拟串口实验实验平台:奋斗版STM32开发板Tiny 实验内容:板子通过USB加电后,先向串口1输出一串测试数据,然后USB被PC识 别出来,虚拟出一个串口号给这个USB设备,此时可以通过在PC端的串口助手类 软件选择该串口号。

进入串口软件界面,可以通过软件无线收发一帧长度最长 为32字节的数据。

该例程可以和V3及MINI板的NRF24L01 UCGUI例程配合使用。

预先需要掌握的知识 2.4G通信模块NRF24L01 1. 产品特性2.4GHz 全球开放ISM 频段,最大0dBm 发射功率,免许可证使用 支持六路通道的数据接收 低工作电压:1.9 1.9~3.6V 低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率) 多频点:125 频点,满足多点通信和跳频通信需要 超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线) 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。

低应用成本:NRF24L01 集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等, NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口, 便于使用低成本单片机。

便于开发:由于链路层完全集成在模块上,非常便于开发。

自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制 自动存储未收到应答信号的数据包 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程 载波检测—固定频率检测 内置硬件CRC 检错和点对多点通信地址控制 数据包传输错误计数器及载波检测功能可用于跳频设置 可同时设置六路接收通道地址,可有选择性的打开接收通道 标准插针Dip2.54MM 间距接口,便于嵌入式应用2.基本电气特性淘宝店铺:1奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验3. 引脚定义:4.工作方式NRF2401有工作模式有四种: 收发模式 配置模式 空闲模式 关机模式 工作模式由CE 和寄存器内部PWR_UP、PRIM_RX 共同控制,见下表:淘宝店铺:2奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验4.1 收发模式收发模式有Enhanced ShockBurstTM收发模式、ShockBurstTM收发模式和直接收发模式三种,收发模式由器件配置字决定,具体 配置将在器件配置部分详细介绍。

stm32f042usb编程 -回复

stm32f042usb编程 -回复

stm32f042usb编程-回复开发板介绍:STM32F042是STMicroelectronics的一款基于ARM Cortex-M0内核的32位微控制器。

它集成了多种功能,适用于各种应用领域,包括消费电子、工业控制和汽车电子等。

为什么选择STM32F042:首先,STM32F042具有出色的性能和低功耗特性,能够满足各种应用的需求。

其次,它拥有丰富的外设,包括多个串口、定时器、ADC和USB功能等,可以满足不同应用的要求。

此外,ST 公司还提供了强大的软件开发环境和丰富的开发工具,使得开发者能够更加便捷地进行开发。

USB编程介绍:USB(Universal Serial Bus)是一种常见的用于连接计算机和外围设备的接口标准。

在STM32F042中,USB功能使得开发者能够实现与计算机的通信,从而实现不同应用的交互功能。

通过USB编程,我们可以实现从主机到设备的数据传输、设备的配置和控制等功能。

步骤一:环境准备在开始USB编程之前,我们需要准备好相应的开发环境。

首先,我们需要安装Keil MDK软件,该软件是一款专为ARM Cortex-M微控制器设计的集成开发环境。

其次,我们需要安装ST的CubeMX软件,它提供了图形化界面,使得配置和生成代码更加方便。

最后,我们需要准备一个STM32F042开发板,并连接到电脑上。

步骤二:配置CubeMX打开CubeMX软件,选择STM32F042微控制器,并设置相应的时钟和外设配置。

在外设配置中,我们需要使能USB功能,并选择相应的USB 类型。

在这个例子中,我们选择的是USB CDC(虚拟串口)类型。

步骤三:生成代码在配置完毕后,点击生成代码按钮,CubeMX将会自动为我们生成所需的初始化代码。

这些代码将包含USB相关的初始化和处理函数,以及其他必要的功能代码。

将这些代码导入到Keil MDK中进行进一步的开发。

步骤四:编写主机代码在Keil MDK中,我们需要编写主机端的代码,以实现与设备的通信功能。

奋斗STM32开发板Tiny NRF24L01转USB虚拟串口例程手册

奋斗STM32开发板Tiny NRF24L01转USB虚拟串口例程手册

奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验NRF24L01+转 USB 虚拟串口实验实验平台:奋斗版STM32开发板Tiny 实验内容:板子通过USB加电后,先向串口1输出一串测试数据,然后USB被PC识 别出来,虚拟出一个串口号给这个USB设备,此时可以通过在PC端的串口助手类 软件选择该串口号。

进入串口软件界面,可以通过软件无线收发一帧长度最长 为32字节的数据。

该例程可以和V3及MINI板的NRF24L01 UCGUI例程配合使用。

预先需要掌握的知识 2.4G通信模块NRF24L01 1. 产品特性2.4GHz 全球开放ISM 频段,最大0dBm 发射功率,免许可证使用 支持六路通道的数据接收 低工作电压:1.9 1.9~3.6V 低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率) 多频点:125 频点,满足多点通信和跳频通信需要 超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线) 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。

低应用成本:NRF24L01 集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等, NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口, 便于使用低成本单片机。

便于开发:由于链路层完全集成在模块上,非常便于开发。

自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制 自动存储未收到应答信号的数据包 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程 载波检测—固定频率检测 内置硬件CRC 检错和点对多点通信地址控制 数据包传输错误计数器及载波检测功能可用于跳频设置 可同时设置六路接收通道地址,可有选择性的打开接收通道 标准插针Dip2.54MM 间距接口,便于嵌入式应用2.基本电气特性淘宝店铺:1奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验3. 引脚定义:4.工作方式NRF2401有工作模式有四种: 收发模式 配置模式 空闲模式 关机模式 工作模式由CE 和寄存器内部PWR_UP、PRIM_RX 共同控制,见下表:淘宝店铺:2奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验4.1 收发模式收发模式有Enhanced ShockBurstTM收发模式、ShockBurstTM收发模式和直接收发模式三种,收发模式由器件配置字决定,具体 配置将在器件配置部分详细介绍。

利用STM32CUBE创建一个虚拟串口

利用STM32CUBE创建一个虚拟串口

利用STM32CUBE创建一个虚拟串口由于现在的PC机大多都没有串口了,但PC机上的很多应用程序却使用串口,为了让PC机与STM32处理器进行通信,可以让STM32处理器,以串行方式与外界进行通信,再用CH340等芯片,实现USB转串口的功能,实现虚拟串口。

不过这样做需要额外的芯片和相关电路,不很理想。

利用STM32处理器自身的USB功能,就可以实现虚拟串口。

由于USB是一个很复杂的东西,所对应的代码很多,如果采用操作寄存器或标准库的方式,都要编写很多代码,也容易出错,而采用STM32CUBE就方便多了。

首先要利用STM32CUBE,选择芯片,比如芯片型号为STM32F103ZET6,如下图所示:然后在Pinout选项页中,先选择“RCC”项,按下图设置:再选择“USB”选项,按下图设置:这一步的最后再选择“USB_DEBICE”,按下图设置:下面要设置时钟,进入“Clock Configuration”选项页,按下图设置:请注意:上图的设置必须保障给USB模块的时钟信号是精准的48MHz,不允许有偏差。

然后进行工程设置,点击菜单项“Porject→Settings...”,这时将弹出一个对话框窗口如下:在该对话框窗口上,输入工程名、工程存放的文件夹、所用的开发工具之后,点击“OK”按键,关闭该对话框。

最后点击菜单项“Porject→Generate Code”,生成工程。

本人用的开发工具是IAR,打开该工程,如下图所示:这个工程已经包含了不少文件,建立了基本的程序框架和初始化代码,只要进一步添加应用程序代码就可以了。

下面将围绕虚拟串口进一步编写程序:在这个工程中,有一个“usbd_cdc_if.c”文件,进行USB虚拟串口进行数据的发送和接收时,首先要在usbd_cdc_if.c文件中修改“APP_RX_DATA_SIZE”、“APP_TX_DATA_SIZE”两个宏,它们用于数据的接收和发送缓冲区的大小;然后要声明一个结构体(并初始化),其代码如下:USBD_CDC_LineCodingTypeDef LineCoding = { 115200, /*baud rate*/ 0x00,/*stop bits - 1*/ 0x00, /*parity - none*/ 0x08, /*nb. of bits 8*/ };这段代码用于指示串口的基本设置。

stm32f042usb编程 -回复

stm32f042usb编程 -回复

stm32f042usb编程-回复stm32f042是一款由意法半导体(STMicroelectronics)公司推出的32位ARM Cortex-M0微控制器,专门用于USB通信应用的开发。

本文将从基础知识开始,一步一步回答有关stm32f042usb编程的问题,旨在帮助读者了解如何使用stm32f042进行USB通信的开发。

首先,我们需要了解一些基础知识。

USB(Universal Serial Bus)是一种用于连接计算机与外部设备的通用接口标准,它能够提供高速、可靠的数据传输。

stm32f042具有内置的USB硬件,可支持USB设备和USB主机功能。

对于USB设备通信开发,stm32f042可以作为USB设备,与主机进行通信。

一、开发环境搭建1. 在PC上安装Keil MDK开发工具。

Keil MDK是一种基于ARM Cortex-M处理器的嵌入式软件开发环境,提供了丰富的开发工具和库函数。

2. 在Keil MDK中创建一个新的工程,并选择stm32f042芯片型号。

3. 配置工程的编译选项和链接选项,使之与stm32f042芯片匹配。

4. 编写应用程序代码,实现USB设备通信功能。

二、USB设备初始化1. 在应用程序的主函数中,调用USB设备初始化函数。

该函数会初始化USB硬件并配置相关寄存器。

2. 配置USB设备的功能描述符。

功能描述符是一组数据结构,用于描述设备所支持的功能和特性。

3. 配置USB设备的端点。

端点是USB通信的基本单位,用于发送和接收数据。

4. 启动USB设备。

使能USB硬件,并设置USB设备状态为“已连接”。

三、USB设备事件处理1. 在应用程序中,通过中断或轮询方式检测USB设备事件的发生。

2. 根据事件类型,执行相应的处理函数。

例如,当检测到USB设备启动事件时,执行设备初始化函数。

3. 在处理函数中,根据具体的应用需求,执行相应的操作。

例如,当检测到USB设备接收到数据时,执行数据处理函数。

STM32CubeF4使用入门

STM32CubeF4使用入门

UM1730STM32CubeF4使用入门山西大学电子信息工程系王晓峰Wangxiaofeng@引言STMCube是由意法半导体原创倡议,旨在通过减少开发负担,时间和费用来为开发者提供轻松的开发体验。

STMCube覆盖了STM32全系列。

STM32Cube版本1.x包括:1、STM32CubeMX,一个图形软件配置工具,允许通过图形化向导来生成C初始化代码。

2、一个广泛的嵌入式软件平台,按照产品系列提供(例如STM32CubeF4对应STM32F4系列)。

此平台包括STM32Cube HAL(一个STM32的硬件抽象层,确保STM32之间最大的可移植性),再加上配套的中间件(RTOS,USB,TCP/IP和图形)。

所有嵌入式软件组件都提供完整的例程。

本用户手册描述了如何开始使用STM32CubeF4固件包。

第一部分,描述了STM32CubeF4固件包的主要特性,STMCube的首创倡议。

第二部分和第三部分提供了一个STM32CubeF4架构概览和固件包结构。

1STM32CubeF4主要特性STM32CubeF4集合了所有开发STM32F4应用嵌入式软件组件。

依照STMCube倡议,这些组件具有高度的可移植性,不止在STM32F4系列中,也包括所有STM32系列。

STM32CubeF4高度兼容STM32CubeMX,STM32CubeMX允许用户生成初始化代码。

包内包括一个底层硬件抽象层(HAL),HAL覆盖了微控制器硬件,集成了广泛的例程,可运行在意法半导体的开发板上。

为了用户便利,硬件抽象层为开源BSD许可协议。

STM32CubeF4包含了一套中间件组件,带有对应的例程。

它们具有非常自由的许可证条款:1、CMSIS-RTOS贯彻了FreeRTOS的开源解决方案2、TCP/IP协议栈基于开源的LwIP解决方案3、FAT文件系统基于开源的FatFs解决方案,支持NAND闪存访问4、完整的USB主从设备协议栈支持。

STM32的USB虚拟串口设计

STM32的USB虚拟串口设计

STM32的USB虚拟串口设计题目, 基于STM32的USB虚拟串口学院,专业,姓名,学号,指导老师,完成时间, 2014年5月19 日河南城建学院本科毕业设计(论文) 中文摘要摘要USB接口由于支持热插拔和标准统一等特点得到了广泛应用,越来越多的电脑设备开始采用USB接口进行数据的传输,而如何在不改变现有应用软件的情况下,将设备移植到USB接口成为人们研究的热门。

论文以USB通信设备类中的抽象控制模型为基础,研究了通信设备类及实现虚拟设备的原理,设计并实现了基于通信设备类的虚拟串口驱动程序。

论文研究设计了基于通信设备类的虚拟串口驱动程序的结构和实现方案,程序主要由通信命令转换和数据传输两部分构成,通信命令转换符合通信设备类中抽象控制模型的规范,数据传输部分对现有虚拟串口的实现技术进行了改进。

论文的主要工作如下:1) 研究了USB协议的请求和传输模式,分析了通信设备类实现虚拟设备的方案。

2) 给出了一种符合通信设备类中抽象控制模型的虚拟串口实现方案。

该方案提供了一种基于通信设备类开发虚拟设备的模板,对设计中的诸多问题进行了详细的说明,并改进了虚拟串口驱动程序中数据的处理流程。

3) 将改进后的数据处理流程应用于虚拟串口的实现中,生成了一种基于通信设备类的稳定、高速的虚拟串口。

最后,在串口测试软件下对虚拟串口驱动程序进行了测试,达到了预期目标。

关键字: 通讯设备类;枚举过程;虚拟串口程序;抽象控制模型河南城建学院本科毕业设计(论文) 英文摘要AbstractUSB interface supports plug and play which has unified standards, so it has a wide range of applications. More and more computer device use USB interface to transfer data, so how to make many old deaves to support USB interface without changing current application is becoming the hot field.USB Communication Device Class and it's abstract control model are studied, principles of Communication Device Class and implementation techniques of abstract device are also analyzed in the thesis. On the basis of this, design and implementation of virtual serial port driver based on Communication Device Class are given.The overall structure and implementation scheme of virtual serial port driver based onCDC are designed. The virtual serial port driver is made up of two parts which are communication command transfer module and data transmission module. The communication command transfer module satisfiesthe specification of abstract control model, and the data transfer part improves the technique of current virtual serial port. The main works in the thesis are as follows:1) The request and transfer model for USB protocol are studied, and the implementation techniques of virtual serial port are analyzed.2) The implementation scheme of virtual serial port driver that satisfy abstract control mode in CDC is graven. A new template for the development of virtual serial port basedon CDC is broughtout, and it describes some issues for the virtual serial port driver in details, at the same time, the processing steps for virtual serial port driver is improved. 3) The improved data processing steps for virtual serial port driver is applied in the implementation of ritual serial port driver, and a stable, high-speed virtual serial portis made. At last, the testfor the virtual serial port driveon ActiveSync is given, and thetest result show that it's function is achieved the requirement goals.Keywords: Communication Device Class ;Enumeration Process;Virtual Serial Port Driver ;Abstract Control Model1河南城建学院本科毕业设计(论文) 英文摘要目录摘要...................................................................... .................................. 错误~未定义书签。

STM32开发入门教程

STM32开发入门教程

STM32 开发入门教程(一) 开发环境建立及其应用入门准备:我们常用的STM32 开发编译环境为Keil 公司的MDK (Microcontroller Development Kit) 和IAR 公司的EWARM.在这里我们提供了比较稳定的新版本编译软件下载: MDK4.10限于篇幅, 在我们的教程里面将先以MDK 下的一个例子来介绍如何使用MDK 进行嵌入式应用开发.MDK 安装与配置:基于MDK 下的开发中基本的过程:(1) 创建工程;(2) 配置工程;(3) 用C/C++ 或者汇编语言编写源文件;(4) 编译目标应用程序(5) 修改源程序中的错误(6) 测试链接应用程序----------------------------------------------------------------(1) 创建一个工程:在uVision 3 主界面中选择"Project" -> "New uVision Project" 菜单项, 打开一个标准对话框选择好你电脑中的保存目录后, 输入一个你的工程名字后点确认.我们的工程中建了一个名字叫"NewProject" 的工程.从设备库中选择目标芯片, 我们的MINI-STM32 开发板使用的是STM32F103V8T6, 因此选中STMicrocontroller 下对应的芯片:ARM 32-bit Cortex-M3 Microcontroller, 72MHz, 64kB Flash, 20kB SRAM,PLL, Embedded Internal RC 8MHz and 32kHz, Real-Time Clock,Nested Interrupt Controller, Power Saving Modes, JTAG and SWD,3 Synch. 16-bit Timers with Input Capture, Output Compare and PWM,16-bit 6-ch Advanced Timer, 2 16-bit Watchdog Timers, SysTick Timer,2 SPI, 2 I2C,3 USART, USB 2.0 Full Speed Interface, CAN 2.0B Active,2 12-bit 16-ch A/D Converter, Fast I/O Ports选择完芯片型号后会提示是否在目标工程中加入 CPU 的相关的启动代码, 如下图所示. 启动代码是用来初始化目标设备的配置, 完成运行的系统初始化工作, 因此我们选择 "是" , 这会使系统的启动代码编写工作量大大减少.----------------------------------------------------------------(2) 配置工程:选择菜单中 "Project" -> "Option for Target" 或者选择快捷菜单中的图标:因为 MINI-STM32 开发板上使用的就是 8M 的晶振且是使用的片内的 RAM 和 ROM 因此"taget" 下我们都可以使用默认的配置;在"Output"菜单下我们需要选中 "Creat Hex File" 来生成编译好的工程代码, 此工程可以通过仿真器或者串口 ISP 烧录进开发板中.注: ISP 烧录过程我们将在入门教程二中给大家介绍."Listing" "User" 菜单中我们保持默认即可."C/C++" 菜单为我们常用的菜单, 这里简单的介绍下他们的具体功能:PreProcesser Symbols 中的 Define, Undefine 菜单表示是工程的宏定义中的变量, 我们将在今后的教程中详细介绍这个功能.Optimization 为优化选项, Level0 为不优化, 这种模式最适合调试, 因为不会优化掉代码, 基本每个用到的变量都可以打断点. Level3 为优化等级最高, 最适合生产过程中下载到芯片中的代码.Include Path 为工程中的包含路径, 一般需将 .h 文件或者库文件的地址配置进去."Asm" 和 "Link" 将在今后的高级教程中介绍."Debug" 为我们调试使用的配置选项, "Use Simulator" 为使用软件仿真. 这里根据大家手里的仿真器来选择配置环境.如果你使用的是 Ulink, 那么就选择 "Ulink Cotex Debug", 如果你选择的是 JLINK, 那么就选择 " Cotex M3 Jlink", 如果你使用的是 ST 公司出的简易仿真器 ST-Link , 那么你就选择 "ST-Link Debug".注意: 右边当中的选项 "Run to main{}" 选项如果勾上就表示仿真时进入了就会进入到main 函数, 如果没有选上就会进入初始地址, 你需要自己打断点运行到你的主程序 main 处.当插上仿真器后选择上面右图中的 Setting 后会跳出一个仿真器的配置菜单. 左边会自动识别出你的仿真器的信息.如下图为 ULINK2 的信息:对于 SWJ 选项为三线制调试, 将在后面的高级教程中介绍.右下方有两个选项:"Verify Code Download" : 表示下载后校验数据"Download to flash": 表示当仿真的时候先将目标代码下载到 Flash 中.Trace 菜单为跟踪配置, 可以实时的将一些变量使用曲线的形式实时表示出来, 我们将在今后的高级教程中介绍这一项功能.注意: 市面上目前的盗版 Ulink2 不支持这项功能, 正版的支持, Jlink 也不支持这项功能."Flash Download" 菜单用来配置使用仿真器程序下载的配置选项, 大家务必选择好和你芯片配套的选项. 如果你是使用的别人模板下修改为你的工程, 这个选项请注意一下, 如果不正确将不能将你的代码下载到芯片中.配置好 "Debug" 后, 那么 "Utilities" 可以不用配置.如果你使用的是仿真器仿真, 在你已经正确得将目标板和仿真器建立了物理连接后, 请选择正确的仿真器进行配置.(二) ISP 在线下载程序ISP:in system programming简介:ISP: 用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;应用场合: 1,ISP 程序升级需要到现场解决,不过好一点的是不必拆机器了;ISP的实现一般需要很少的外部电路辅助实现,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

整理以上的信息,我们就不难理解以上函数牵扯的功能是,USART2 中断接收的 数据放在 APP_RxBuffer[]中,而又通过 APP_RxBuffer[]发送的 USB 上位机上。
下面继续阅读 usbd_cdc_vcp.c 中的程序,如下图所示是 usbd_cdc_vcp.c 源文件 的第 245 行到 256 行,功能是将 BUF 中的数据通过 USART2 发送到主机 PC。
(4)主机在成功获取到一个数据包的设备描述符后并且确认无错误后,返回一 个 0 长度的状态数据包给设备。 (5)主机再对设备复位一下,接下来进入到设置地址阶段。 (6)USB 主机发出一个设置地址的请求,地址包含在建立包中。 (7)USB 设备在收到地址后,返回 0 长度的状态包。 (8)主机收到 0 长度的状态包之后,返回一个 ACK。 (9)设备在收到这个 ACK 之后,就可以启用新的地址了。 USB 一直进中断的原因:主机每 1ms 就给设备发送一个 sof,3ms 没反应主机就 挂起。所以一直进中断属于正常现象。
上面的 APP_RxBuffer[]是定义的全局变量,这个全局变量到底是干什么的呢, 我们进一步发现 APP_RxBuffer[]在 usbd_cdc_vcp.c 源文件中亦有出现。在 usbd_cdc_vcp.c 源文件中第 624 行到 661 行,阅读这个函数,知道这个函数主 要是将 APP_RxBuffer[]中的数据发送到主机的 IN 端点(关于端点概念不理解的 建议阅读 USB2.0 英文协议)
这样以后,USB 接收的数据就可以在 app.c 中使用了,这里的接收的数据长度是 根据接收的数据不断清 0,并赋值的,所以可以根据 Rx_Length 大于 0,判断是 否有新的数据接收。
2. 如何区分全速设备和高速设备
USB 如何区分低速、全速和高速设备:对于全速和高速设备,上拉电阻是接在 D+ 上;而低速设备则是上拉电阻接在 D-上。
3. USB 枚举过程
(1)USB 主机检测到 USB 设备插入后,对设备复位。 (2)USB 主机对设备发送获取设备描述符的标准请求。 (3)设备收到该请求后,在数据过程将设备描述符返回给主机。
7. STM32F4 的 USB 虚拟串口 Demo 裁剪
下面讲解下如何裁剪 Demo 程序达到如下框图所示功能,就是收发数据都是通过 USB 口。这里主要讲解上位机下发的数据,下位机收到后立马转发到上位机。
想只用 USB,就要把 UART 的中断接收语句 void EVAL_COM_IRQHandler(void)禁 止掉,在 usbd_cdc_vcp.c 文件的最后
进一步下向下读程序,是打开了 USART2 的接收中断,通过 USART2 的接收中断接 收数据,并通过 VCP_DataTx(0,0)进行了数据处理,如下图 usbd_cdc_vcp.c 的 第 366 行到 379 行。
下面主要看看 VCP_DataTx(0,0)是怎么处理的,如下图所示是 usbd_cdc_vcp.c 的第 208 行到 228 行。是将通过 USART2 的中断接收的数据放进 APP_RxBuffer[] 中,这里的数组最大长度是 2048。
以及在 app.c 中声明,
同时修改 usbd_cdc_vcp.c 中 static uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len)函数,将 Buf 中的数据放入定义的全局数组变量 Rx_Buffer[]中, 并将长度 Len 赋值给全局变量 Rx_Length。
7>记得将 Demo 程序的优化等级改成 None,避免跟踪调试时乱跳。
6. STM32F4 的 USB 虚拟串口 Demo 解析
官方例程用 IAR 打开如上图所示,这里主要关注下 app.c 源文件、stm32fxxx_it.c 源文件、usbd_cdc_vcp.c 源文件和 usbd_cdc_core.c 源文件。 1>App.c 源文件有 main 函数,main 函数主要是 USBD_Init()语句,是对(1)语句里。 2>初始化后,USB 的枚举及传输数据都是在 stm32fxxx_it.c 的中断中发起的。 枚举是在中断和底层驱动及内核中完成的,这里不用管,也不需要改动。 3>对于数据的传输是我们关心的是在 usbd_cdc_vcp.c 中,阅读例程,我们可以 发现,USBD_Init()语句初始化时初始化了两个串口:COM1 和 EVAL_COM1,如下 图 usbd_cdc_vcp.c 的第 106 行到 109 行;其中 COM1 是虚拟出来的串口,即 USART0, 而 EVAL_COM1 是真实存在的 USART2,挂载在 APB1 总线上,详见 stm32f407xx 数 据手册。
而 BUF 数据的来源是哪里呢,我们通过查找是通过 APP_FOPS 结构体和 VCP_fops 结构体衔接在一起的,所以下面的程序来源就 usbd_cdc_vcp.c 源文件中第 69 行到 76 行,关于 VCP_fops 的定义。
以及 usbd_cdc_core.c 的 136 行,将 VCP_fops 和 APP_FOPS 联系到一起,下面 APP_FOPS 都干了些什么?
基于 STM32_USB-Host-Device_Lib_V2.1.0 或 V2.2.0 官方 DEMO 例程的 STM32F4 全速 USB 虚拟串口 VCP 程序裁剪
教程
1. 概述
本文档是基于 STM32_USB-Host-Device_Lib_V2.1.0 官方库中 Device 下 STM32F4 全速 VCP 裁剪的,主要是利用 STM32F4 已有资源,代替 UART 串口,用于和上位 机进行通信,理论最大通信速率是 64*19*8b/1ms=950kbps,这里的 64 是 1 个包 数据量 64 个字节,19 是一帧最大是 19 个包,8 是一个字节 8 位,1ms 是一帧的 时间,详见 USB2.0 英文协议。如果想开发更高速模式下的通信,可以考虑使用 高速模式下的 VCP 通信,本文档也可以作为参考。 以下是列举的准备工作: 1>下载 STM32_USB-Host-Device_Lib_V2.1.0 官方库,同时去 ST 官方下载 UM1021 关于本例程的说明文档。可以在 ST 官方下载,找不到的也可以去 STMCU 论坛搜 索。 2>本文档的图片是基于 IAR6.4 开发环境进行截图。 3>下载 USB2.0 英文协议。需要了解 USB 的枚举,以及 USB 的工作机制,对每次 发起通信都是由主机轮询开始的有清晰的认识,并重点看一下批量传输。有条件 的可以借用 USB480 协议分析仪。 4>阅读 STM32F4 数据手册中关于 USB 的一些寄存器的介绍。
其中在 usbd_cdc_core.c 的 671 到 689 行利用到了 APP_FOPS,通过联系上下文 可 以 知 道 这 个 函 数 是 通 过 usb 的 out 端 点 接 收 主 机 发 来 的 数 据 放 在 USB_Rx_Buffer 中,其中 USB_Rx_Cnt 就是存放在 USB_Rx_Buffer 的数据长度。 因为 VCP_fops 和 APP_FOPS 联系到一起,所以就不难理解上面的 BUF 就是 USB 通过 OUT 端口接收的数据。
4>C/C++预定义: USE_STDPERIPH_DRIVER,STM32F4XX,USE_STM324xG_EVAL,USE_USB_OTG_FS 5>打开 USB_conf.h 文件,把 #define VBUS_SENSING_ENABLED 封掉,如果我们 不用 VBUS(PA9)。 否则不用封掉。 6>编译,下载,复位板子,并安装虚拟串口驱动(ST 官网上有),上面的步骤完 成后,计算机中的虚拟串口出来。如果不出来很可能是 D+和 D-的连线问题,请 检查下是否需要连接 ESD 和去耦电容。
4. STM32F4 的 USB 的中断作用
STM32 的 USB 模块可以产生三种中断:USB 唤醒中断、USB 高优先级中断和 USB 低优先级中断,在 STM32 的参考手册中没有详细说明这三种中断对应哪些事件, 现说明如下: 1)USB 唤醒中断:在中断向量表中的位置是 42。这个中断在 USB 设备从暂停模 式唤醒时产生,唤醒事件由 USB_ISTR 寄存器的 WKUP 位标识。 2)USB 高优先级中断:在中断向量表中的位置是 19。这个中断仅由 USB 同步 (Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生,正 确传输事件由 USB_ISTR 寄存器的 CTR 位标识。 3)USB 低优先级中断:在中断向量表中的位置是 20。这个中断由所有其它的 USB 事件产生,例如正确传输(不包括同步模式和双缓冲块模式)、USB 复位等,事件 标志位在 USB_ISTR 寄存器中。 在 STM32 的 USB 开发包的例子中包含了上述中断的处理,例如在 USB 扬声器的例 子中,CTR_HP 函数处理 USB 高优先级中断;在所有例子中都有 USB_Istr()函数 处理 USB 低优先级中断。
5. STM32F4 的 USB 虚拟串口 Demo 的使用
1>下载 STM32 的官方例程:STM32_USB-Host-Device_Lib_V2.1.0 2>开发板自己准备,要求 PA11,PA12 连接 D+,D-,PA9 是否连接 VBUS 都可以 3>打开例程: STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Device_Examples\VCP\EWAR M 里的工程配置 cpu 为 stm32F407IG,
首先了解下 USB 的接收缓冲区,USB_Rx_Buffer[CDC_DATA_MAX_PACKET_SIZE]这 里的 CDC_DATA_MAX_PACKET_SIZE=64,也即是一个包最大的接收量。 再次了解下 APP_Rx_Buffer[APP_RX_DATA_SIZE]的 FIFO 环形缓冲区,这 里,APP_RX_DATA_SIZE=2048,即 2KB 字节,主要用于上发数据:
相关文档
最新文档