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; gccfg.b.pwdn = 1;
位16即为pwdn,在程序中把这个为清零后USB根本不会去检查USB枚举,完全无法实现USB通信,所以根据手册解决是不行的。
我们都知道STM32F103是通过在D+管脚上加入上拉电阻实现软连接的,那么同样在这个管脚上进行软连接控制,初始化后直接把D+上拉,这样USB检查是没有问题了,同时在通过UART1的TXD发送数据时,由于D+已经被上拉,所以即使Vbus被拉低了但D+还是被拉高,过USB不会重启,从而实现了USB和UART1的共用。
分类:
MCU for STM32
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2015-04-16 超声波测距温度补偿
2015-04-16 系统封装接口层 cmsis_os
2015-04-16 STM32F4XX高效驱动篇2 I2C
2015-04-16 Stm32f103 ADC 学习笔记
2015-04-16 Stm32f103 DAC 学习笔记
2015-04-16 stm32 Bootloader设计(YModem协议) (转)
2015-04-16 SendMessage、PostMessage原理