STM32-USB虚拟串口-学习笔记

发布者:CyborgDreamer最新更新时间:2018-06-02 来源: eefocus关键字:STM32  USB  虚拟串口 手机看文章 扫描二维码
随时随地手机看文章

USB

  • 用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。

  • USB 接口支持设备的即插即用和热插拔功能

  • 发展到现在已经有 USB1.0/1.1/2.0/3.0 等多个版本。目前用的最多的就是 USB1.1 和USB2.0,USB3.0 目前已经开始普及。STM32F103 自带的 USB 符合 USB2.0 规范。

USB驱动软件开发

usb_core(移植过程,代码一般不用修改)

  • usb_core.c

usb_croe.c 文件,该文件用于处理 USB2.0 协议。

  • usb_init.c

usb_init.c 文件,该文件里面只有一个函数:USB_Init,用于 USB 控制器的初始化,不过对USB 控制器的初始化,是 USB_Init 调用用其他文件的函数实现的,USB_Init 只不过是把他们连接一下罢了,这样使得代码比较规范。

  • usb_int.c

usb_int.c 文件,该文件里面只有两个函数 CTR_LP 和 CTR_HP,CTR_LP 负责 USB 低优先级中断的处理。而 CTR_HP 负责 USB 高优先级中断的处理。

  • usb_mem.c

usb_mem.c 文件,该文件用于处理 PMA 数据,PMA 全称为 Packet memory area,是 STM32内部用于 USB/CAN 的专用数据缓冲区,该文件内也只有 2 个函数即: PMAToUserBufferCopy和 UserToPMABufferCopy,分别用于将 USB 端点的数据传送给主机和主机的数据传送到 USB

端点。

  • usb_regs.c

usb_regs.c 文件,该文件主要负责 USB 控制寄存器的底层操作,里面有各种 USB 寄存器的底层操作函数。

  • usb_sil.c

usb_sil.c 文件,该文件为 USB 端点提供简化的读写访问函数。


usb_config(移植过程,重点修改)

  • hw_config.c

hw_config.c 文件,该文件用于硬件的配置,比如初始化 USB 时钟、USB 中断、低功耗模式处理等。

  • usb_desc.c

usb_desc.c 文件,该文件用于 Virtual Com 描述符的处理。

  • usb_endp.c

usb_endp.c 文件,该文件用于非控制传输,处理正确传输中断回调函数。

  • usb_istr.c

usb_istr.c 文件,该文件用于处理 USB 中断

  • usb_prop.c

usb_prop.c 文件,该文件用于处理所有 Virtual Com 的相关事件,包括 Virtual Com 的初始化、复位等等操作。

  • usb_pwr.c

usb_pwr.c 文件,该文件用于 USB 控制器的电源管理;

USB的初始化

  1. USB_Interrupts_Config()

用于设置 USB 唤醒中断和USB 低优先级数据处理中断

  1. Set_USBClock()

用于 配置 USB 时钟,也就是从 72M 的主频得到 48M 的 USB 时钟(1.5 分频)。

  1. USB_Init()

用于初始化 USB,最主要的就是调用了 Virtual_Com_Port_init 函数,开启了 USB 部分的电源等。

这里需要特别说明的是,USB 配置并没有对 PA11 和 PA12 这两个 IO 口进行设置,是因为,一旦开启了 USB 电源(USB_CNTR的 PDWN 位清零)PA11 和 PA12 将不再作为其他功能使用,仅供 USB 使用,所以在开启了 USB电源之后不论你怎么配置这两个 IO 口,都是无效的。要在此获取这两个 IO 口的配置权,则需要关闭 USB 电源,也就是置位 USB_CNTR 的 PDWN 位,我们通过USB_Port_Set 函数来禁止/允许 USB 连接,在复位的时候,先禁止,再允许,这样每次我们按复位电脑都可以识别到 USB鼠标,而不需要我们每次都拔 USB 线。

USB 虚拟串口的数据发送过程,通过端点1来实现的usb_endp.c(void EP1_IN_Callback (void))

USB 虚拟串口数据的接收过程,通过端点3来实现的usb_endp.c(void EP3_OUT_Callback(void))


关键字:STM32  USB  虚拟串口 引用地址:STM32-USB虚拟串口-学习笔记

上一篇:STM32F407使用USB作虚拟串口出现黄感叹号
下一篇:stm32cubemx I2C读取AT24C16

推荐阅读最新更新时间:2024-03-16 16:04

Intel 8系列芯片组未发布便遭遇USB 3.0 bug
Intel 7系列芯片组就开始原生支持USB 3.0,将于年终配合Haswell处理器发布的8系列自然也会继续,但是来自Intel内部的一份文档显示,Intel碰到了一条“虫子”。 Intel在这份文档中警告主板厂商,Haswell处理器、8系列芯片组的系统如果从S3睡眠模式中恢复,那些通过USB 3.0接口连接的设备便会出现问题,之前访问中的程序和/或数据就会失去响应,必须重新开启。 举例来说,如果你使用Adobe Reader打开了USB 3.0 U盘上的一个PDF文档,睡眠再恢复后文档就会显示一片空白,必须重新打开这个文档,甚至是重启Adobe Reader。 不过此bug并不会导致数据丢失等后果,因此Inte
[半导体设计/制造]
Intel 8系列芯片组未发布便遭遇<font color='red'>USB</font> 3.0 bug
STM32】STM32CubeMX教程--功能介绍
功能介绍: 我们首先看下CubeMx的主界面,模块分类大体是这样,我们接下来一一讲解。 已存在工程 Open Existing Projects:打开项目工程 新建工程 ·Start My project from MCU:从MCU开始我的项目 ·Start My project from STBoard:从ST开发板开始我的项目 ·Start My project from Cross Selector:从交叉选择器启动我的项目 软件包管理 ·CHECK FOR UPDATE:检查更新 ·INSTALL/REMOVE:安装/移除
[单片机]
【<font color='red'>STM32</font>】STM32CubeMX教程--功能介绍
STM32 USB 之从0开始移植笔记
-----------------------------------动机----------------------------------- 写在前面的话:最近逛淘宝无意间发现RC522居然只要10元左右就可以包邮买到,真是太便宜了,就忍不住买了个回来玩玩。到货移植到我的板子上OK 后突然发现我的USB口紧张了,一个用来给板子供电一个插jlink 一个插入usb转串口给RC522下命令。就想着将板子供电和RC522传输用一个USB接口来实现。这就是这次折腾USB的来由~-~ ----------------------------------开始折腾USB----------------------------- 首
[单片机]
<font color='red'>STM32</font> <font color='red'>USB</font> 之从0开始移植笔记
STM32F105 USB管脚Vbus的处理
对于STM32F105/107来说,为了监测USB的连接问题,程序默认是通过Vbus管脚进行检查的。但是Vbus管脚和UART1的TXD复用,导致我们在使用UART1发送数据时候,USB重启的问题。为了解决这个问题,本人查了大量的资料和咨询了不太靠谱的STM32技术支持,一直没有得到解决的方法。 在STM32F105数据手册上是这样说的 如果另一个共享的外设要使用OTG_FS_VBUS引脚(PA9)或把它作为通用I/O口,必须激活PHY的断电模式(清除OTG_FS_GCCFG寄存器的位16)。 这个位在程序中的定义如下: gccfg.d32 = 0; gccfg.b.vbussensingB = 1; gc
[单片机]
STM32到CONST的全局变量
程序如下: const int globalConstDat = 12; int globalDat = 11; int main(void) { int localDat = 6; const int localConstDat = 7; USART_Configuration(); //ptint to PC from USART1 printf( &globalConstDat = 0x%p, &globalDat = 0x%prnrn , &globalConstDat, &globalDat); printf( &localDat = 0x%p, &localConstDat = 0x%prn , &localDat
[单片机]
整理STM32GPIO输出速率问题
GPIO 引脚输出速度有:GPIO_Speed_2MHz (10MHz, 50MHz) 官方一点的解释: GPIO口的驱动电路响应速度,不是输出信号的速度。输出信号的速度与程序有关,通过选择速度来选择不同的驱动电路,降低功耗控制噪声。 又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。) 可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。 (如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。失真因素?) 如果信号频
[单片机]
STM32在keil下使用jlink时产生错误的解决方法
当STM32在keil下使用jlink时产生错误得时候该怎么办? 最近一段时间一直在学习STM32和ucos的移植,使用的开发环境是keil u4版本。仿真器是80元买的jlink。 在学习了STM32固件库和ucos内核与移植相关的程序之后,写了一个流水灯程序,准备下载到板子上看看情况。哪知程序还没有下进去,在debug时,keil的错误提示到:Error: Flash download failed- Cortex-M3 感觉这么错误很普遍,也是初学者常常遇到的错误,下面我就将这个错误产生的原因和解决方法赘述一下: 错误产生的原因和分析,解决。 首先,我们看到提示信息是有关flash的,那么我们来查看一下STM3
[单片机]
<font color='red'>STM32</font>在keil下使用jlink时产生错误的解决方法
基于STM32调用固件库实现点灯
相信学过单片机的同学,对于调库这个操作都不陌生,大多数人都是从调别人的库阶段过来的。 今天看到一个评论说,如果只会调库,到了公司后会发现自己啥都不是。其实这话说的一点也不假,如果只会调库的话,你的单片机水平还停留在C语言阶段,并不能称为真正的单片机开发。 但我们要有这么一个概念:调库是自己编写的开始,如果上来就给你讲寄存器这些,我相信很多初学者都接收不了、理解不了这写寄存器到底在干啥。可是,如果从调别人库开始学习单片机,我们就会对单片机有个初始概念,对于后面的学习非常有帮助。 所以,今天我们就来看一下如何从调库工程师成为真正的开发工程师。 1. 什么是调库? 如果你通过机构的培训视频,比如野火的STM32单片机开
[单片机]
基于<font color='red'>STM32</font>调用固件库实现点灯
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved