搜索
查看: 3199|回复: 4

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

[复制链接]

该用户从未签到

41

主题

332

帖子

42

蝴蝶豆

金牌会员

最后登录
2021-4-2
发表于 2019-3-26 11:10:09 | 显示全部楼层 |阅读模式
本帖最后由 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线 就好了,




回复

使用道具 举报

该用户从未签到

41

主题

332

帖子

42

蝴蝶豆

金牌会员

最后登录
2021-4-2
 楼主| 发表于 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状态是不是需要 结合上电控制电路才能激活?我是直接供电的
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1306

帖子

929

蝴蝶豆

版主

最后登录
2021-3-31
发表于 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盘要顺利通过枚举才行
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

3

帖子

0

蝴蝶豆

初级会员

最后登录
2020-12-3
发表于 2019-6-6 20:36:00 | 显示全部楼层
50031185 发表于 2019-3-27 19:35
另外
switch(Appli_state)
        {

你好,请问“如果用 Host 符合设备模式”这个是哪个模式啊?在cubemx里面配置吗
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2020-8-26
发表于 2020-8-26 16:19:48 | 显示全部楼层
你好  请问2线是什么意思  我也遇到你这种情况  一直是卡在START
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-26 09:16 , Processed in 0.167689 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表