关于STM32F4 USB模块寄存器的问题
刚接触USB部分时间不长,把F4的官方例程大概看了一下,太长,太繁琐,所以,自己通过读写寄存器的方式把初始化和中断进行了梳理,目前已经能枚举成功,并能正确加载WinUSB驱动。但是,有些寄存器的设置完全不知道作者的意图,以及寄存器的功能和设计原因,还希望有这方面研究的网友能指导一下。
1.OTG_FS_DOEPTSIZx寄存器:
手册描述:要接收 SETUP 数据包,必须将控制 OUT 端点中的 STUPCNT 字段 (OTG_FS_DOEPTSIZx) 编程为非零值。但是又接着说:如果在接 收 SETUP 数据包之前,未将 STUPCNT 字段编程为适当值,模块仍能接收 SETUP 数 据包并使 STUPCNT 字段递减。
好像是也不会因为该寄存器的值影响中断,因为没搞清楚,所以直接忽略了该寄存器的设置,仍然可以顺利枚举
2.OTG_FS_DIEPCTL0 和OTG_FS_DOEPCTL0寄存器:
在USB复位中断中,例程注释了:If the EP is already active don't change the EP Control register. 而IN EP0和OUT EP0默认情况下USBAEP=1,所以,按照注释来讲,并不会设置这2个寄存器。
但是,在枚举完成中断中,USB_OTG_EP0Activate函数又根据枚举速度来设置了DIEPCTL0.MPSIZ。
这2个设置不是相互矛盾的吗?
多看手册呀,If the STUPCNT field is not programmed to a proper value before receiving a SETUP packet, the core still receives the SETUP packet and decrements the STUPCNT field, but the application may not be able to determine the correct number of SETUP packets received in the Setup stage of a control transfer,
第二个问题应该是端点未使能的情况下都是可以修改的 anobodykey 发表于 2018-4-24 09:44
多看手册呀,If the STUPCNT field is not programmed to a proper value before receiving a SETUP packet ...
感谢你的解答
但是,应用程序知道SETUP包的数量干什么用呢,收到一个SETUP包之后按照要求响应主机就行了呀,需要设置这个DOEPTSIZ寄存器的应用场景有哪些呢?
端点0的控制寄存器中手册描述USBAEP总是置1的,所以,在枚举中断中,官方库又设置寄存器的MPSIZ就不明白其原因了
页:
[1]