OTG -- STM32 OTG驱动代码下载及简述(三)

2024-02-02 11:52

本文主要是介绍OTG -- STM32 OTG驱动代码下载及简述(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前沿

1 STM32 OTG标准库的获取

2 设备模式代码匹配开发板

2.1 OTG FS全速代码修改

2.2 OTG HS代码修改

2.2.1 OTG HS外部高速PHY运行在高速模式代码修改

2.2.2 OTG HS外部高速PHY运行在全速模式代码修改

2.2.3 OTG HS内部全速PHY运行在全速模式代码修改


前沿

前面对STM32F407 OTG模块及ULPI接口进行了简单的讲解,现在针对ST提供的标准库进行简单讲解,主要针对标准库的获取和标准库的使用进行讲解,更多USB相关信息请查看:USB专栏

1 STM32 OTG标准库的获取

通过ST官网,ST OTG代码下载链接,获取OTG代码,按照要求填写邮箱即可下载。

下载之后,解压,打开《Project》目录,有以下的例程,分为设备模式例程、主机模式例程和主机/设备模式模式例程。

2 设备模式代码匹配开发板

我们这里只讲解设备模式下CDC类的代码,其它代码类似,想要了解更多关于USB相关的信息,建议读者查看博主的USB专栏。

2.1 OTG FS全速代码修改

1. 首先使用keil打开《VCP_Loopback》工程,因为我们是STM32F407的开发板,所以选择配置如下,选择《STM324xG-EVAL_USBD-FS》子工程(这里我们先选择全速设备,全速设备也就是OTG FS模块,使用PA11和PA12作为USB的通信引脚,不需要外接PHY):

2. 修改系统时钟源,打开《system_stm32f4xx.c》文件,修改《PLL_M》宏定义,改为8,再打开《stm32f4xx.h》文件,修改《HSE_VALUE》宏定义,改为8000000(因为博主使用的是8M的HSE)。

3. 下载程序,如果板子ok,需要保证PA9引脚有5V或3.3V电压,那么能够在设备管理器查看到COM设备。

2.2 OTG HS代码修改

OTG HS模块分为两种模式:

  • 内部全速PHY模式
  • 外部高速PHY模式

外部高速PHY又分为两种模式(外部高速PHY支持高速模式):

  • 外部高速PHY运行在全速模式
  • 外部高速PHY运行在高速模式

具体细节可以查看博主的前两篇文章,对这些接口有一个简单的讲解,也足够初学者进行学习了。

2.2.1 OTG HS外部高速PHY运行在高速模式代码修改

1. 选择《STM324xG-EVAL_USBD-HS》子工程,如下:

2. 按照OTG FS模式修改系统时钟源。

3. 下载程序,如果板子ok,需要通过ULPI接口外挂USB3318或者USB3300芯片,那么能够在设备管理器查看到COM设备,此设备是一个高速设备。

2.2.2 OTG HS外部高速PHY运行在全速模式代码修改

在《2.2.1 OTG HS外部高速PHY运行在高速模式代码修改》章节的基础上,只需要修改一个地方,就能实现外部高速PHY运行在全速模式,修改如下:

2.2.3 OTG HS内部全速PHY运行在全速模式代码修改

 1. 选择《STM324xG-EVAL_USBD-HS》子工程,如下:

2. 按照OTG FS模式修改系统时钟源。

3. 把宏定义《USE_ULPI_PHY》改为《USE_EMBEDDED_PHY》,如下图所示:

4. 编译运行,此时不需要外接PHY,只是此时USB的信号引脚为PB14和PB15,并且PB13需要3.3V或者5V供电,那么能够在设备管理器查看到COM设备,此设备是一个全速设备。

这篇关于OTG -- STM32 OTG驱动代码下载及简述(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670621

相关文章

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到