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))


没有更多推荐了,返回首页