Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
USB OTG
记录STM32 USB OTG ID 管脚初始化以及变化过程
发布于 2019-11-16 14:47:08 浏览:3377
订阅该版
使用的是STM32F411E-DISCO板子, CubeMX并没有支持OTG双向的代码生成,只能找以前标准库的代码看(**STSW-STM32046**) 标准库关于ID脚的初始化: ```c /* Configure ID pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_OTG1_FS); ``` 照着写: ```c __HAL_RCC_GPIOA_CLK_ENABLE(); /**USB_OTG_FS GPIO Configuration PA11 ------> USB_OTG_FS_DM PA12 ------> USB_OTG_FS_DP */ GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct_ID.Pin = GPIO_PIN_10; GPIO_InitStruct_ID.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct_ID.Pull = GPIO_PULLUP; GPIO_InitStruct_ID.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct_ID.Alternate = GPIO_AF10_OTG_FS; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct_ID); /* Peripheral clock enable */ __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); /* USB_OTG_FS interrupt Init */ HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0); HAL_NVIC_EnableIRQ(OTG_FS_IRQn); ``` USB开中断 ```c cfg.phy_itface = USB_OTG_EMBEDDED_PHY; USB_CoreInit(stm32_otg, cfg); stm32_otg->GINTMSK |= USB_OTG_GINTMSK_OTGINT; stm32_otg->GINTMSK |= USB_OTG_GINTMSK_CIDSCHGM; USB_EnableGlobalInt(stm32_otg); ``` OTG_FS_IRQHandler中断处理 ```c void OTG_FS_IRQHandler(void) { rt_uint32_t global_interrupt; rt_err_t ret = RT_EOK; rt_interrupt_enter(); global_interrupt = USB_ReadInterrupts(stm32_otg); USB_ClearInterrupts(stm32_otg, ~global_interrupt); if ((global_interrupt & common_interrupt) != 0) { ret = common_interrupt_proc(stm32_otg, global_interrupt); } if (ret != RT_EOK) return; if (stm32_otg->GOTGCTL & USB_OTG_GOTGCTL_CIDSTS) { rt_kprintf("CIDSTS: B
"); if (stm32_otg->GOTGCTL & USB_OTG_GOTGCTL_BSVLD) { rt_kprintf("BSVLD valid
"); } else { rt_kprintf("BSVLD not valid
"); } } else { rt_kprintf("CIDSTS: A
"); if (stm32_otg->GOTGCTL & USB_OTG_GOTGCTL_ASVLD) { rt_kprintf("ASVLD valid
"); } else { rt_kprintf("ASVLD not valid
"); } } if (USB_GetMode(stm32_otg) == USB_DEVICE_MODE) { if ((global_interrupt & device_interrupt) != 0) device_interrupt_proc(stm32_otg, global_interrupt); } else { if ((global_interrupt & host_interrupt) != 0) host_interrupt_proc(stm32_otg, global_interrupt); } rt_interrupt_leave(); } ``` 运行结果: 刚开始OTG的角色为B-device,插入OTG线切换为A-device,拔出切换回B-device ![init.png](https://oss-club.rt-thread.org/uploads/201911/16/143726bnqb8ltfj34nyysq.png) ![plugin.png](https://oss-club.rt-thread.org/uploads/201911/16/143727lfdlwzpvzbvcdhjl.png) ![plugout.png](https://oss-club.rt-thread.org/uploads/201911/16/143727sedjhhdy1lipjneb.png)
查看更多
4
个回答
默认排序
按发布时间排序
flyboy
2019-11-18
Do my self();
可以,文章很硬核
DTZX_2760
2021-10-12
这家伙很懒,什么也没写!
楼主,源码可否发来看看?
杰瑞鼠
2022-04-20
2024龙行天下
如果不用ID线,分时主从的OTG是否可以实现。或者说这个ID线是否可以用一个普通的IO引脚代替? 现在stm32cubmx是否可以支持双向代码的生成了?
aozima
2022-04-20
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
推荐以后不要用ID脚了,这是`mini/micro`USB时代的产物。 现在接口推荐type-c,里面也没有ID信号了。 有需要主从切换的项目,先捕获插拔事件,然后进行主从侦测。 如果担心侦测错误,可以根据项目需求,设置默认模式。 同时固件中可以指定模式,比如触摸屏里面加个选项 - USB接口模式 - OTG AUTO default - host only - device only
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
charlown.cai
这家伙很懒,什么也没写!
提问
12
回答
53
被采纳
0
关注TA
发私信
相关问题
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部