STM32F4全速USB虚拟串口VCP程序裁剪教程
- 格式:pdf
- 大小:4.20 MB
- 文档页数:24
奋斗版 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编程-回复开发板介绍: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 开发板例程手册———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创建一个虚拟串口由于现在的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编程-回复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设备接收到数据时,执行数据处理函数。
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虚拟串口学院,专业,姓名,学号,指导老师,完成时间, 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 开发编译环境为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口,通过专门设计的固件程序来编程内部存储器。
VCP 例程用于数据传输时丢失数据的处理问题: 问题:ST 的 USB 固件库 某客户工程师在其产品的设计中,使用了 STM32F205VET6。
据其工程师讲述:他使用 STM32F205VET6 中的 VCP 例程来实现虚拟串口的功能,但是他发现虚拟串口一次输出的数据(从串口到上位机)如果 超过 2Kbytes 就会造成数据丢失,只输出尾部的 2Kbytes。
客户工程师检查代码发现 USB 的 FIFO 大小 由宏定义 APP_RX_DATA_SIZE 决定,而 APP_RX_DATA_SIZE 的大小刚好为 2Kbytes。
所以他认为此 FIFO 设计太小而造成的,于是他将 FIFO 的大小改成 5Kbyte,不过修改后并不能解决问题。
调研: 调研:1. 打开“STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library (UM1021)” 库里边的 VCP 例程,位于“...\STM32_USB-HostDevice_Lib_V2.1.0\Project\USB_Device_Examples\VCP”中。
对其进行测试,并没有出现所说的问 题,APP_RX_DATA_SIZE 的大小仍然为 2Kbytes,不管传输的数据是 2Kbytes 还是 5Kbytes 甚至是 25Kbytes,完全没有问题。
2. 了解客户程序 UART 所设置的波特率,为 115200,与原 VCP 例程一致。
USB 采用的是 Full Speed, 全速 USB 总线的帧周期为 1ms。
3. 在 usbd_conf.h 中可以看到 APP_RX_DATA_SIZE 的定义在这里,为 2048,它定义了 APP_Rx_Buffer 的大小。
APP_Rx_Buffer 其实是一个循环缓冲区,APP_Rx_ptr_in 指明了其数据进来的位置,当 USART 接收到数据时,将数据存储于 APP_Rx_ptr_in 指定的位置;APP_Rx_ptr_out 指明其数据取出 的位置,当 USB 到 FIFO 中取出数据时,起始地址由 APP_Rx_ptr_out 决定。