STM Урок 36. USB. Host Mass Storage Class. Часть 2



 

Урок 36

Часть 2

 

USB. Host Mass Storage Class

 

Продолжаем работать с тем же проектом USB_HOST_MSC_FATFS.

В файле main.c в функции FileReadWrite продублируем участок кода

 

  if(f_mount(&USBDISKFatFs, (TCHAR const*)USBH_Path, 0) != FR_OK)

  {

    /* FatFs Initialization Error */

    Error_Handler();

  }

else

{

        if(f_open(&MyFile, «123.txt», FA_READ) != FR_OK)

        {

                Error_Handler();

        }

        else

        {

                res = f_read(&MyFile, rtext, sizeof(rtext), (void *)&bytesread);

                if((bytesread == 0) || (res != FR_OK))

                {

                        Error_Handler();

                }

                else

                {

                        LCD_Clear();

                        LCD_SetPos(0,0);

                        LCD_String((char*)rtext);

                        f_close(&MyFile);

                }

        }

}

 

И один из дублей закоментируем, перед ним напишем комментарий //Read, а с другим будем работать, исправляя его для записи в файл.

 

 

Данный участок исправим следующим образом

 

else

{

 if(f_open(&MyFile, «`1234.txt«, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK)

        {

                        Error_Handler();

 

То есть, если файл существует, то мы его открываем на запись, если не существует, то предварительно создаем.

Добавим переменную в нашу функцию

 

  uint8_t rtext[100];                                   /* File read buffer */

  uint8_t wtext[] = «STM32 is OK!»; /* File write buffer */

//Read

 

 

Изменим строчку чтения на запись

 

res = f_write(&MyFile, wtext, sizeof(wtext), (void *)&byteswritten);

 

В следующей строке также будут некоторые изменения

 

        res = f_write(&MyFile, wtext, sizeof(wtext), (void *)&byteswritten);

        if((byteswritten == 0) || (res != FR_OK))

 

Из дальнейшего кода мы уберем вывод на дисплей а добавим код включения зеленого светодиода

 

                        if((byteswritten == 0) || (res != FR_OK))

                        {

                                Error_Handler();

                        }

                        else

                        {

                                f_close(&MyFile);

                                HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);

                        }

 

Соберем код, прошьём контроллер, и увидим что светодиод светится. Также вынем наш флеш-диск, воткнем его в usb-порт ПК, откроем и посмотрим, создан ли файл и записана ли в файл информация.

 

 

Предыдущая часть Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Отладочную плату можно приобрести здесь STM32F4-DISCOVERY

 

 

Смотреть ВИДЕОУРОК

 

STM32 USB. Host Mass Storage Class

7 комментариев на “STM Урок 36. USB. Host Mass Storage Class. Часть 2
  1. Владимир:

    Большое спасибо за ваши уроки!

  2. kmspb:

    Спасибо!
    Попробовал настроить трассировку на STM32F407VET6 плате. 4 дня убил , но все наконец-то получилось с вашей помощью. Может будет интересно другим и сделаете урок на эту тему.

  3. Evgeniia:

    Здравствуйте! Спасибо за ваши примеры и разборы!
    Хотелось бы спросить, сделала проект по вашему примеру. Возникла ситуация, когда отключаешь флешку от устройства, не идентифицируется отключение, и при повторном подключении, флешка уже не стартует. Не подскажите, какие возможны проблемы?

    • Здравствуйте!
      Скорей всего дело в том, что урок уже довольно давно выходил и библиотеки могли претерпеть изменения, особенно FATFS, хотя SD HAL тоже менялась. Возможно уже надо что-то другое отслеживать. Посмотрите урок 141, он новее, хотя и по другому контроллеру, может что-то и прояснится.

  4. AndrewK:

    Здравствуйте! Попробовал Ваш проект на STM32F107 (по подобию), все работает: чтение и запись файлов на разных флешках размером до 16 МБайт включительно. Есть случаи, когда флешки не связываются, т.е. на стадии HOST_ENUMERATION, когда запрашиваются первые 8 байт дескриптора устройства, от флешки нет ответа. Не подскажите, где покапать, в каком направлении???

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*