你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

已完结 用 CubeMX 创建USB Host only 模式加载U盘 状态异常

[复制链接]
KEY1 提问时间:2019-3-26 11:10 /
本帖最后由 50031185 于 2019-3-27 19:31 编辑

最近在使用STM32 F2 系列 读取U盘,


可是发现使用CubeMx生成文件后
  在调试时  发现

循环中的 MX_USB_HOST_Process();后
USB 状态量 Appli_state  一直处于  APPLICATION_START状态

该状态下 无法加载U盘,打开文件,
该如何操作呢?


while(1)
{

MX_USB_HOST_Process();

  switch(Appli_state)
        {
                case APPLICATION_READY:
                        MSC_Application();
                        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);
                        Appli_state = APPLICATION_START;
                        break;

                case APPLICATION_START:

                        break;
                case APPLICATION_DISCONNECT:
                        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);
                        Appli_state = APPLICATION_IDLE;
                default:
                        break;
        }

}

USB-1.png

USB-3.png


经过 几天排查,最后发现是 软复位的电路有问题,去掉了软复位电路 ,直接用2线 就好了,




收藏 评论4 发布时间:2019-3-26 11:10

举报

4个回答
KEY1 回答时间:2019-3-27 19:35:29
另外
switch(Appli_state)
        {
                case APPLICATION_READY:
                        MSC_Application();
                        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);
                        Appli_state = APPLICATION_START;
                        break;

                case APPLICATION_START:

                        break;
                case APPLICATION_DISCONNECT:
                        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);
                        Appli_state = APPLICATION_IDLE;
                default:
                        break;
        }

}
这段话在很多例子里有,但是 实际不对,
我用 U盘方式,调试跟踪 ,根本没有途径能让Appli_state 达到APPLICATION_READY
观察到   如果用 Host 符合设备模式 就有可能达到APPLICATION_READY状态
U 盘 加载目的达成,没有继续细究
不知道 APPLICATION_READY状态是不是需要 结合上电控制电路才能激活?我是直接供电的
butterflyspring 回答时间:2019-4-24 15:52:19
在F4的测试中看到,在U盘枚举结束后会回调到这个USBH_UserProcess函数:
else
    {
      MSC_Handle->current_lun = 0U;
      MSC_Handle->state = MSC_IDLE;

#if (USBH_USE_OS == 1U)
      phost->os_msg = (uint32_t)USBH_CLASS_EVENT;
#if (osCMSIS < 0x20000U)
      (void)osMessagePut(phost->os_event, phost->os_msg, 0U);
#else
      (void)osMessageQueuePut(phost->os_event, &phost->os_msg, 0U, NULL);
#endif
#endif
      phost->pUser(phost, HOST_USER_CLASS_ACTIVE);
    }
在USBH_UserProcess函数中会设置Appli_state状态到APPLICATION_READY状态:
static void USBH_UserProcess(USBH_HandleTypeDef *phost, uint8_t id)
{
  switch(id)
  {
  case HOST_USER_SELECT_CONFIGURATION:
    break;
   
  case HOST_USER_DISCONNECTION:
    Appli_state = APPLICATION_DISCONNECT;
    if (FATFS_UnLinkDriver(USBDISKPath) == 0)
    {
      if(f_mount(NULL, "", 0) != FR_OK)
      {
        LCD_ErrLog("ERROR : Cannot DeInitialize FatFs! \n");
      }
    }
    break;
   
  case HOST_USER_CLASS_ACTIVE:
    Appli_state = APPLICATION_READY;
    break;
   
  case HOST_USER_CONNECTION:
    if (FATFS_LinkDriver(&USBH_Driver, USBDISKPath) == 0)
    {
      if (f_mount(&USBH_fatfs, "", 0) != FR_OK)
      {
        LCD_ErrLog("ERROR : Cannot Initialize FatFs! \n");
      }
    }
    break;

  default:
    break;
  }
}
所以看起来像是U盘要顺利通过枚举才行
ycw2018 回答时间:2019-6-6 20:36:00
50031185 发表于 2019-3-27 19:35
另外
switch(Appli_state)
        {

你好,请问“如果用 Host 符合设备模式”这个是哪个模式啊?在cubemx里面配置吗
canghaik 回答时间:2020-8-26 16:19:48
你好  请问2线是什么意思  我也遇到你这种情况  一直是卡在START

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版