STM32H7 在STM32Cube中配置USB_FS,打开Enable_internal_IP_DMA后电脑枚举失败。
跟踪代码,找到stm32h7xx_hal_pcd.c中有一段代码:
/* Disable DMA mode for FS instance */
if ((USBx->CID & (0x1U << 8)) == 0U)
{
hpcd->Init.dma_enable = 0U;
}
说明USB全速设备不应该使用DMA,使用了也应该关掉。但是此处的失能机制失效了。
CID寄存器说明如下。在STM32H7中,此寄存器第九位总是1,并不能指示是否为全速设备。导致错误。需手动关闭Enable_internal_IP_DMA,即可通信。