Урок 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
Смотреть ВИДЕОУРОК
Большое спасибо за ваши уроки!
А Вам спасибо за высокую оценку моих трудов и за внимание к сайту и каналу!
Спасибо!
Попробовал настроить трассировку на STM32F407VET6 плате. 4 дня убил , но все наконец-то получилось с вашей помощью. Может будет интересно другим и сделаете урок на эту тему.
И Вам спасибо!
Ссылку убрал, все ссылки в личку в контакте.
Здравствуйте! Спасибо за ваши примеры и разборы!
Хотелось бы спросить, сделала проект по вашему примеру. Возникла ситуация, когда отключаешь флешку от устройства, не идентифицируется отключение, и при повторном подключении, флешка уже не стартует. Не подскажите, какие возможны проблемы?
Здравствуйте!
Скорей всего дело в том, что урок уже довольно давно выходил и библиотеки могли претерпеть изменения, особенно FATFS, хотя SD HAL тоже менялась. Возможно уже надо что-то другое отслеживать. Посмотрите урок 141, он новее, хотя и по другому контроллеру, может что-то и прояснится.
Здравствуйте! Попробовал Ваш проект на STM32F107 (по подобию), все работает: чтение и запись файлов на разных флешках размером до 16 МБайт включительно. Есть случаи, когда флешки не связываются, т.е. на стадии HOST_ENUMERATION, когда запрашиваются первые 8 байт дескриптора устройства, от флешки нет ответа. Не подскажите, где покапать, в каком направлении???