打印
[STM32F4]

研究过STM32F4 USB寄存器的大神在哪里?

[复制链接]
1689|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天又遇到一个奇怪的问题,使用1个批量输出和1个批量输入端口1,用WinUSB作为驱动,能正常收到上位机发的数据,但是在向上位机IN数据的时候,怎么都进不了中断。我采取的方式是收到上位机OUT出来的数据后,设置DIEPEMPMSK |= 1<<1,将EP1的TxFIFO空中断屏蔽打开,然后在端点1的RxFIFO空中断中设置IN的数据,但是怎么都进不了中断。我看DIEPEMPMSK |= 1<<1设置成功了的,DIEPINT1.TXFE也是置1的,DAINTMSK.IEPM=3,根据USB模块的中断要求,应该是会将DAINT.IEPINT=2才对,但是为什么硬件不将其置位呢,是有什么设置疏忽了?


捕获.PNG (23.23 KB )

捕获.PNG
沙发
mmuuss586| | 2018-5-3 21:49 | 只看该作者
USB不熟;
香水城比较熟悉;

使用特权

评论回复
板凳
jcdzxh| | 2018-5-3 23:02 | 只看该作者
401vcp,寄存器操作,自用

使用特权

评论回复
地板
diaozhe|  楼主 | 2018-5-4 09:02 | 只看该作者
jcdzxh 发表于 2018-5-3 23:02
401vcp,寄存器操作,自用

指导一下撒~~~~

使用特权

评论回复
5
jcdzxh| | 2018-5-4 11:36 | 只看该作者



按这个流程操作,数据就发出去了,自然就进IN完成中断了
前提是端点正确配置。
401寄存器版,我也是花了巨多的时间试出来的。

使用特权

评论回复
6
diaozhe|  楼主 | 2018-5-4 12:24 | 只看该作者
jcdzxh 发表于 2018-5-4 11:36
按这个流程操作,数据就发出去了,自然就进IN完成中断了
前提是端点正确配置。
401寄存器版,我也是花了 ...

我花了4个月时间搞F4的USB,因为之前没有接触过USB,目前也就能正常枚举完成,用WinUSB的驱动模板,现在能正常收到上位机的数据,但是上位机读数据,怎么都读不到,我debug看了,是因为我写的固件程序不进入TxFIFO空中断,没法向TxFIFO中写数据(因为我的写FIFO过程在TXFIFO空中断中进行),以及启动发送

方便的话,加个好友详聊呗~~~

使用特权

评论回复
7
jcdzxh| | 2018-5-5 08:31 | 只看该作者
diaozhe 发表于 2018-5-4 12:24
我花了4个月时间搞F4的USB,因为之前没有接触过USB,目前也就能正常枚举完成,用WinUSB的驱动模板,现在 ...



照你的思路实验了一下,能进中断的,
左上是中断服务,
红框是激活IN-空中断,三条命令少一个都不行
右边是调试结果自己看

使用特权

评论回复
8
diaozhe|  楼主 | 2018-5-5 15:33 | 只看该作者
jcdzxh 发表于 2018-5-5 08:31
照你的思路实验了一下,能进中断的,
左上是中断服务,
红框是激活IN-空中断,三条命令少一个都不行

感谢,我想我找到我的程序问题了,手册还是没仔细看:DIEPEMPMSK此寄存器用于控制 IN 端点 FIFO 空中断的生成 (TXFE_OTG_FS_DIEPINTx)。
我把它用在批量端点上,我说怎么进不了,现在明白了,不知道理解得对不对

我看你的程序,中断是用的ITTXFE标志(1<<4),我之前控制IN和批量IN端点都是用的TXFE(1<<7),所以我怎么都进不了批量端点1的TxFIFO空中断

但是,你说框里的3条少一条都不行,就不太理解了,因为按照手册的介绍DIEPEMPMSK只对控制IN端点有效,是不是你程序在控制IN端点的TXFE中设置了开ITTXFEMSK屏蔽,因为看你的中断服务中用的是DIEPINT1.ITTXFE标志

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

0

粉丝