stm32F072 USB DP 软件控制上拉不起作用
最近在学习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的功能却实现不了?
上面四个问题,是我在调试中遇到的,各位帮忙看一下,如果由之前测试过的代码的请您贴一下,以帮助我尽快找到问题的所在,十分感谢。
给你个ST官方USB标准库,STM32F0x2xx 全速USB设备库 里面默认都是用内部上拉的 killf_123 发表于 2017-9-9 19:11
给你个ST官方USB标准库,STM32F0x2xx 全速USB设备库 里面默认都是用内部上拉的 ...
十分感谢你提供的固件包,我已经试过了,使用DCD_DevDisconnect(pdev);想要实现usb设备拔出的效果是不行的 我大胆猜测是你的单片机BOOT电平有问题,插入电脑后并没有执行你写的程序,而是进入了USB下载模式,但你并没有安装相应驱动程序,所以提示未识别USB设备。建议你看看未识别USB设备的PID/VID,看看是不是和DFU的相符,然后再做更进一步的分析。。。:) zcl201207 发表于 2017-9-10 22:37
我大胆猜测是你的单片机BOOT电平有问题,插入电脑后并没有执行你写的程序,而是进入了USB下载模式,但你并 ...
十分感谢你的回答,我测试过了,可以确认boot的电平没有问题,因为我可以正常使用jlink仿真下载,同时因为设别枚举失败,我没法看到具体的设备信息,所以应该不是进入了usb下载状态 我用072的usb升级,直接外加上拉电阻。你这样做是否可以模拟u盘 阿莫西林 发表于 2017-9-12 11:27
我用072的usb升级,直接外加上拉电阻。你这样做是否可以模拟u盘
我个人觉得应该是可以的,但是没有实际测试过 用过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、第四个暂时不确定该怎么回答你。 我用过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有例程,或者你可以去阿莫上面,我记得那里面有人上传相关实现功能的程序,你可以下载参考一下 我用过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有例程,或者你可以去阿莫上面,我记得那里面有人上传相关实现功能的程序,你可以下载参考一下
页:
[1]
2