3916|6

650

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

STM32 标准USB库(V2.2.1)的一坑 [复制链接]

        最近调试STM32F205USB通信,使用了F205的两个USB,一个HS一个FS,不过都是用的HS,都是做USB主机,外接其他USB外设,USB在分别调试好FS和HS后,合在一起出问题了,拔插后总是识别有干扰,HS拔掉后,检测不了,而且导致FS也出问题。

        首先使用CUBEMX生产代码,测试HS和FS同时使用,并没有问题,插拔后识别正常,故排除HS和FS不能同时使用的担心。检查初始化代码,各种修改都没有结果,折腾了一天,头脑懵逼。

        第二天,继续调试看寄存器,偶然发现拔掉HS外设的时候,FS有寄存器内容被清除了,而HS寄存器该清除的数据却没有清除,看到这里想到了和自己预料的HS和FS处理过程中有地方搞混了,接下来就是单步调试,最后找到问题点如下:

 

  case HOST_DEV_DISCONNECTED :
    
    /* Manage User disconnect operations*/
    phost->usr_cb->DeviceDisconnected();
    
    /* Re-Initialize Host for new Enumeration */
    USBH_DeInit(pdev, phost);
    phost->usr_cb->DeInit();
    phost->class_cb->DeInit(pdev, &phost->device_prop); 
    USBH_DeAllocate_AllChannel(pdev);  
    phost->gState = HOST_IDLE;
   
    /* Re-Initialize Host for new Enumeration */
    HCD_Init(pdev, 
#ifdef USE_USB_OTG_FS
            USB_OTG_FS_CORE_ID
#else
           USB_OTG_HS_CORE_ID
#endif
);

这里拔掉USB外设后,重新初始化的时候用了宏定义,而我是同时使用F205的HS和FS,以致不管我拔掉HS外设还是FS外设,

都是把FS的重新初始化了。

最后修改此段代码,增加判断即可:

  if( pdev == &USB_OTG_Core )
  {
      HCD_Init(pdev, USB_OTG_HS_CORE_ID);
  }
  else if( pdev == &USB_OTG_FS_Core )
  {
      HCD_Init(pdev, USB_OTG_FS_CORE_ID);
  }

使用的USB库为:V2.2.1,例程DualCore,这个例程我也测试过,同时使用HS和FS是有问题的,望大家遇到此处时不要在被坑。

 

此帖出自stm32/stm8论坛

最新回复

有何不可?又不是让你写USB协议栈,库不满足的地方才用寄存器撸。   详情 回复 发表于 2020-8-24 21:33
点赞(1) 关注
 

回复
举报

60

帖子

1

TA的资源

一粒金砂(中级)

沙发
 

有cubemx usb库的说明么?

此帖出自stm32/stm8论坛
 
 

回复

107

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

你可厉害了!

楼主有USB_HOST_CDC 接3复合串口的应用吗?

此帖出自stm32/stm8论坛

点评

你是指USB_HOST_CDC应用吗?官方的例子里面有的  详情 回复 发表于 2020-8-21 16:42
 
 

回复

650

帖子

8

TA的资源

纯净的硅(初级)

4
 
inkinessray 发表于 2020-8-21 15:08 你可厉害了! 楼主有USB_HOST_CDC 接3复合串口的应用吗?

你是指USB_HOST_CDC应用吗?官方的例子里面有的

此帖出自stm32/stm8论坛
 
 
 

回复

7671

帖子

18

TA的资源

五彩晶圆(高级)

5
 

所以我一般是库辅助寄存器用,库不满足的时候上寄存器。。。ST的cube坑是真不少。

此帖出自stm32/stm8论坛

点评

USB你也能用寄存器来搞?  详情 回复 发表于 2020-8-24 15:23
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

327

帖子

1

TA的资源

纯净的硅(初级)

6
 
freebsder 发表于 2020-8-23 21:45 所以我一般是库辅助寄存器用,库不满足的时候上寄存器。。。ST的cube坑是真不少。

USB你也能用寄存器来搞?

此帖出自stm32/stm8论坛

点评

有何不可?又不是让你写USB协议栈,库不满足的地方才用寄存器撸。  详情 回复 发表于 2020-8-24 21:33
 
个人签名模电临时工
 
 

回复

7671

帖子

18

TA的资源

五彩晶圆(高级)

7
 
shipeng 发表于 2020-8-24 15:23 USB你也能用寄存器来搞?

有何不可?又不是让你写USB协议栈,库不满足的地方才用寄存器撸。

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表