你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32F072 USB DP 软件控制上拉不起作用

[复制链接]
散吧散吧 提问时间:2017-9-9 18:11 /
最近在学习USB相关的知识,从底层一点一点开始写驱动,但是遇到了点问题。
使用的芯片型号:stm32F072C8T6
USB的DM和DP分别连接到PA11和PA12

发现的问题如下:
(1)使用标准库写一个在main函数,并在其中只写一个while(1) 下载进单片机,然后将板子通过usb和电脑连接,电脑可以发现未识别的设备。

         疑问:我认为默认USB设备是关闭的,那么对应的IO应该是普通IO状态,所以应该不会出现现未识别的设备

2)通过查阅相关手册得知,通过控制USB寄存器USB_BCDR中的bit15 DPPU位可以控制内部的DP上拉电阻的连接和断开,以此来模拟USB设备的插入和拔出的过程,因此自己写代码进行相关的测试,但是发现DPPU不管如何改变,通过开发板链接的usb设备始终在设备管理器中显示为未识别设备。(已经基本排除代码问题,因为直接在仿真环境下使用仿真工具修改DPPU的状态USB设备依然不会断开)
         疑问:按照道理来说DPPU是可以控制usb设备的断开和连接的,已经基本排除了是时钟或者其他的影响,难道是想要让DPPU控制有效还需要其他操作或者条件?
(3)我阅读了ST官方提供的USB的代码发现在usb的初始化中并没有对usb使用的两个GPIO做相关初始化,同时如果我在函数一开始就将usb对应的两个引脚初始化为普通IO,那么设备不会在一上电就检测到usb设备,而是在当我开启usb的时候才会发现usb设备。
         疑问:是不是一旦USB功能使能,PA11和PA12就会自动设置对应的GPIO属性。那么就回到了问题(1),我有点怀疑问题(2)DPPU没有作用是和GPIO的初始化有关的,但是到底需要如何设置GPIO,请有相关经验的给我点意见建议。
(4)通过实验发现,虽然DPPU不能模拟设备的插拔的过程,但是通过对usb寄存器USB_CNTR的bit1位 PDWN设置,将其设置为1,设备断开连接,将PDWN设置为0则电脑可以发现未识别的设备。
         疑问:为什么PDWN会有DPPU的功能,但是DPPU的功能却实现不了?

上面四个问题,是我在调试中遇到的,各位帮忙看一下,如果由之前测试过的代码的请您贴一下,以帮助我尽快找到问题的所在,十分感谢。

收藏 评论17 发布时间:2017-9-9 18:11

举报

17个回答
渣渣华 回答时间:2017-9-12 20:48:02
我用过STM32F103的做USB模拟u盘
1、USB识别使用检测DP脚和VBUS电平的,而且默认是检测的,当你插入USB的时候,自动识别,但是显示无法识别USB应该是你没有安装驱动
2、http://www.docin.com/p-962729793.html?qq-pf-to=pcqq.c2c 这是我收藏的人家写的资料,2、3两个问题,你自己看看里面的内容,虽然不知道M0和M3在USB上面有什么区别,但是你可以借鉴一下
3、ST有例程,或者你可以去阿莫上面,我记得那里面有人上传相关实现功能的程序,你可以下载参考一下

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

渣渣华 回答时间:2017-9-12 20:47:41
我用过STM32F103的做USB模拟u盘
1、USB识别使用检测DP脚和VBUS电平的,而且默认是检测的,当你插入USB的时候,自动识别,但是显示无法识别USB应该是你没有安装驱动
2、http://www.docin.com/p-962729793.html?qq-pf-to=pcqq.c2c 这是我收藏的人家写的资料,2、3两个问题,你自己看看里面的内容,虽然不知道M0和M3在USB上面有什么区别,但是你可以借鉴一下
3、ST有例程,或者你可以去阿莫上面,我记得那里面有人上传相关实现功能的程序,你可以下载参考一下
渣渣华 回答时间:2017-9-12 20:43:00
用过103做模拟u盘。
1、STM32模拟u盘,VBUS是默认开着的,即当你插入USB时,会芯片检测到有,会去做识别,http://www.docin.com/p-962729793.html?qq-pf-to=pcqq.c2c 这是我自己收藏的人家写的资料,里面有详细说明
2、第二个问题,我发的那个你仔细看看,里面也有说明了,虽然不知道,M0和M3有什么区别,但是你可以试试
3、如何初始化GPIO,你可以参考ST的例程,或者是网上找一些例程,里面都有初始化的,很简单
4、第四个暂时不确定该怎么回答你。
killf_123 回答时间:2017-9-9 19:11:41
给你个ST官方USB标准库,STM32F0x2xx 全速USB设备库   里面默认都是用内部上拉的

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

散吧散吧 回答时间:2017-9-9 20:00:16
killf_123 发表于 2017-9-9 19:11
给你个ST官方USB标准库,STM32F0x2xx 全速USB设备库   里面默认都是用内部上拉的 ...

十分感谢你提供的固件包,我已经试过了,使用DCD_DevDisconnect(pdev);想要实现usb设备拔出的效果是不行的
zcl201207 回答时间:2017-9-10 22:37:37
我大胆猜测是你的单片机BOOT电平有问题,插入电脑后并没有执行你写的程序,而是进入了USB下载模式,但你并没有安装相应驱动程序,所以提示未识别USB设备。建议你看看未识别USB设备的PID/VID,看看是不是和DFU的相符,然后再做更进一步的分析。。。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

散吧散吧 回答时间:2017-9-11 20:15:43
zcl201207 发表于 2017-9-10 22:37
我大胆猜测是你的单片机BOOT电平有问题,插入电脑后并没有执行你写的程序,而是进入了USB下载模式,但你并 ...

十分感谢你的回答,我测试过了,可以确认boot的电平没有问题,因为我可以正常使用jlink仿真下载,同时因为设别枚举失败,我没法看到具体的设备信息,所以应该不是进入了usb下载状态
阿莫西林 回答时间:2017-9-12 11:27:40
我用072的usb升级,直接外加上拉电阻。你这样做是否可以模拟u盘
散吧散吧 回答时间:2017-9-12 20:06:02
阿莫西林 发表于 2017-9-12 11:27
我用072的usb升级,直接外加上拉电阻。你这样做是否可以模拟u盘

我个人觉得应该是可以的,但是没有实际测试过
渣渣华 回答时间:2017-9-12 20:48:23
为啥我评论需要审核呢?
渣渣华 回答时间:2017-9-12 20:49:06
我用过STM32F103的做USB模拟u盘
1、USB识别使用检测DP脚和VBUS电平的,而且默认是检测的,当你插入USB的时候,自动识别,但是显示无法识别USB应该是你没有安装驱动
2、这是我收藏的人家写的资料,2、3两个问题,你自己看看里面的内容,虽然不知道M0和M3在USB上面有什么区别,但是你可以借鉴一下
3、ST有例程,或者你可以去阿莫上面,我记得那里面有人上传相关实现功能的程序,你可以下载参考一下
渣渣华 回答时间:2017-9-12 20:50:02
原来发链接是没办法通过的,那我就没办法给你我收藏的资料咯
散吧散吧 回答时间:2017-9-13 22:02:40
这个帖子可以关闭了,谢谢上面朋友的热心帮助,问题已经找到,因为买的最小系统板子为了兼容stm32f103系类,所以默认外部接了上拉电阻,我是没有仔细检查。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版