OTG -- STM32F407 OTG ID/VBUS/SOF引脚说明(四)

2024-02-06 00:12

本文主要是介绍OTG -- STM32F407 OTG ID/VBUS/SOF引脚说明(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前沿

1 ID引脚

1.1 ID引脚作为普通GPIO使用

1.2 ID引脚作为OTG引脚使用

2 VBUS引脚

2.1 VBUS引脚作为普通GPIO使用

2.2 VBUS引脚作为OTG引脚使用

3 SOF引脚

3.1 SOF引脚作为普通GPIO使用

3.2 SOF引脚作为OTG引脚使用


前沿

前面对OTG模块及OTG代码进行了简单的讲解,但是STM32F407 OTG模块除了USBDP、USBDM和ULPI引脚之外,还有ID、SOF、VBUS引脚,这些引脚既可以空闲出来作为其他GPIO使用,也可以通过这些引脚来控制OTG的状态,下面就讲讲如何使用ID、SOF、VBUS这些引脚。

这里只针对OTG FS模块Device进行讲解,OTG HS模块类似。

1 ID引脚

OTG ID引脚可以作为区分主机或者从机的标志,当ID引脚拉高或者悬空的时候,OTG被识别为设备模式,当ID引脚拉低的时候,OTG被识别为主机模式。

当然STM32F407 OTG模块也能把ID引脚空闲出来,使ID引脚可以作为普通的GPIO使用。

1.1 ID引脚作为普通GPIO使用

查看用户手册,OTG_FS_GUSBCFG寄存器的FDMOD位置1,OTG_ID引脚就可以用作普通的GPIO了。

反应到代码的处,如下图所示:

1.2 ID引脚作为OTG引脚使用

OTG_FS_GUSBCFG寄存器的FDMOD位清零,OTG_ID引脚必须用作OTG信号引脚,并且OTG_ID拉高或悬空,为设备模式,OTG_ID拉低,为主机模式

反应到代码处,需要修改代码如下:

1. 屏蔽代码“USB_OTG_SetCurrentMode(pdev, DEVICE_MODE)”

2. 修改ID引脚为AF功能

2 VBUS引脚

OTG VBUS引脚为USB供电引脚,USB模块要运行,VBUS引脚必须保持5V高电平供电,当然STM32F407 OTG模块支持内部VBUS供电,此时VBUS引脚可以作为普通GPIO使用。

2.1 VBUS引脚作为普通GPIO使用

查看用户手册,OTG_FS_GCCFG寄存器的NOVBUSSENS位置1,OTG_VBUS引脚就可以用作普通的GPIO了。

反应到代码的处,如下图所示:

2.2 VBUS引脚作为OTG引脚使用

 OTG_FS_GCCFG寄存器的NOVBUSSENS位清零,OTG_VBUS引脚必须用作OTG信号引脚,此时VBUS引脚需要外部5V供电。

反应到代码处,需要修改代码如下:

1. 打开宏定义《VBUS_SENSING_ENABLED》

2. 修改VBUS引脚为输入模式

3 SOF引脚

OTG_SOF引脚用于输出SOF信号的频率,全速设备输出1KHz频率(SOF为1ms),高速设备输出8KHz频率(SOF为125us)。

下图是使用逻辑分析仪抓取的OTG FS SOF输出信号的波形图。

3.1 SOF引脚作为普通GPIO使用

 查看用户手册,OTG_FS_GCCFG寄存器的SOFOUTEN位清零,OTG_SOF引脚就可以用作普通的GPIO了。

反应到代码的处,如下图所示:

3.2 SOF引脚作为OTG引脚使用

OTG_FS_GCCFG寄存器的SOFOUTEN位置1,OTG_SOF引脚就可以输出SOF频率。

反应到代码处,需要修改代码如下:

1. 打开宏定义《USB_OTG_FS_SOF_OUTPUT_ENABLED》

2. 修改SOF引脚为AF功能

实测发现,SOF脉冲输出不受OTG_FS_GCCFG寄存器的SOFOUTEN位影响,只要配置了PA8(OTG FS模块)的AF功能,SOF脉冲就能从相应的引脚输出

这篇关于OTG -- STM32F407 OTG ID/VBUS/SOF引脚说明(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的