|
本帖最后由 caxfan 于 2021-4-26 22:03 编辑
最近有个项目采用mbedOS开发stm32F407 USB设备程序
采用visualGDB方式(gcc arm-none-eabi 9.3.1)成功实现USB功能,由于其它附加功能较大超过Flash容量又不想更改MPU
所以更改为keil MDK5.34编译,程序容量问题得到解决,但是USB却不识别.
具体原因是主机端发送查询命令,设备没有应答即没有进入HAL_PCD_IRQHandler(&instance->hpcd);
经过多天的排查对比两种情况的寄存器值发现keil下的GINTMSK=0而visualGDB下GINTMSK=0x803c3818.
进入程序调试发现USB初始化时运行到函数
HAL_StatusTypeDef USB_DevInit (USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
...
/* 禁用所有中断。 */
USBx->GINTMSK = 0U;
/* 清除所有挂起的中断 */
USBx->GINTSTS = 0xBFFFFFFFU;
/* 启用常见中断 */
if (cfg.dma_enable == DISABLE)
{
USBx->GINTMSK |= USB_OTG_GINTMSK_RXFLVLM;
}
/* 仅启用与设备模式匹配的中断 */
--> USBx->GINTMSK |= (USB_OTG_GINTMSK_USBSUSPM | USB_OTG_GINTMSK_USBRST | \
USB_OTG_GINTMSK_ENUMDNEM | USB_OTG_GINTMSK_IEPINT | \
USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTMSK_IISOIXFRM | \
USB_OTG_GINTMSK_PXFRM_IISOOXFRM | USB_OTG_GINTMSK_WUIM);
if(cfg.Sof_enable)
{
USBx->GINTMSK |= USB_OTG_GINTMSK_SOFM;
}
if (cfg.vbus_sensing_enable == ENABLE)
{
USBx->GINTMSK |= (USB_OTG_GINTMSK_SRQIM | USB_OTG_GINTMSK_OTGINT);
}
...
运行到-->处没有正确赋值!?
不知何故?
手动修改GINTMSK=0x803c3818则程序设备识别USB
请问是什么原因,怎么修改?谢谢!
(编译方式是armclang6.16 Oz+运行时优化)
|
|