OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3681|回复: 0

关于STM32F412的USB设置问题

[复制链接]

4

主题

43

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2016-9-4
在线时间
73 小时
发表于 2020-11-1 21:15:21 | 显示全部楼层 |阅读模式
本帖最后由 风之伤544 于 2020-11-1 21:20 编辑

前段时间搞一个入门级的hifi播放器,USB读卡器一直搞不定,f407、f411、f429几乎我能找到的f4开发板例程我都试了一遍,统统检测不到。都快要放弃了,偶然看到f7开发板的USB设置,突然觉得是不是f412的USB寄存器不一样呢?赶紧对照3个芯片的参考手册进行对比,果然不一样

第一个寄存器:OTG_FS  控制和状态寄存器 (OTG_FS_GOTGCTL)就不一样,下图是f407的寄存器,缺少位21、20、7到2
f407设置.png f7设置.png
f412的寄存器,显然多了多了位21和位20,位21是用于指示当前USB是主设备还是从设备状态,位20是用于选择USB1.3还是USB2.0,位7到2都有
f412设置.png f7设置.png
再看看F7的寄存器,没有位21但也有位20、7到2
f7设置.png f7设置.png
最后看看原子哥的f7开发手册,显然在设置位7、6,基本可以确认问题出在这!
f7设置.png
那怎么改呢?
除了增加例程代码还有注意到#if defined (STM32F446xx) || defined (STM32F469_479xx) || defined (STM32F767xx)
显然是增加对f767的支持,而我的启动文件是startup_stm32f40_41xxx.s,那么只要在后面增加|| defined (STM32F40_41xxx)
即所有的#if defined (STM32F446xx) || defined (STM32F469_479xx) || defined (STM32F767xx)增加|| defined (STM32F40_41xxx)即可:
#if defined (STM32F446xx) || defined (STM32F469_479xx) || defined (STM32F767xx)||defined (STM32F40_41xxx)

USB连接电脑问题解决了,但是又出了新的问题,当数据线已经插入,然后进入USB应用时,电脑检测不到USB自然不可能连接成功,
只能重新插拔一次,这样真的很麻烦。还有我想检测USB数据线是否插入,以显示在状态栏上。
解决方法就是没有进入USB应用时,PA11设置为外部检测,专门负责检测USB数据线是否已经插入,如果已经插入则将PA12设为推挽输出模式,
先设置为低电平,延时一段时间后再设置为高电平,这样就可以模拟一次USB插拔,电脑就然后再进入USB初始化。
退出USB应用之后,想恢复检测功能,还必须先给USB掉电,然后才能关闭USB OTG时钟,否则PA11端口无法恢复正常
退出APP应用时要加的设置代码是:
USB_OTG_StopDevice(&USB_OTG_dev);//停用USB
USB_OTG_WRITE_REG32 (&USB_OTG_dev.regs.GREGS->GCCFG, 0<<16);//掉电
RCC->AHB2ENR&=~(1<<7);                    //关闭USB OTG时钟        



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-29 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表