Данная библиотека позволяет подключить USB флешку и работать с ней через OTG порт платы Discovery. Библиотека FatFs (USB версия) дает функции, позволяющие работать с файлами на флешке.
Примечание: существует библиотека FatFs для работы с SD картами, а также библиотека SD + USB (Урок 87).
Библиотека имеет только две функции:
1. Функция инициализации, которая должна вызываться только в начале.
2. HOST_Do-функция, которая запускается циклически и возвращает статус USB порта. Статус меняется, как только будет обнаружен ключ USB флешки, доступной для работы с FatFs.
Примечание: автор проверил две флешки. После попытки работы с флешкой объемом 8GB от компании SanDisk, программа выдала ошибку "DEVICE_NOT_SUPPORTED". С второй флешкой, 4 Гб Intenso ошибки нет, без проблем можно читать и записывать файлы.
Для подключения к плате необходим переходник с USB на microUSB. (Его можно купить на eBay или Amazon).
Пример работы:
Используемые выводы:
PA9 -> USB_OTG_VBUS PA10 -> USB_OTG_ID PA11 -> USB_OTG_DM PA12 -> USB_OTG_DP PC0 -> USB_VBUS_Enable
Требуемые библиотеки:
Подключаемые модули CooCox-IDE: GPIO, MISC
Поддерживаемые библиотеки: STM32_UB_FATFS (USB-Version)
Перечисления:
typedef enum { USB_MSC_HOST_NO_INIT =0, // интерфейс USB не инициализирован USB_MSC_DEV_DETACHED, // нет подключенного устройства USB_MSC_SPEED_ERROR, // Скорость USB не поддерживается USB_MSC_DEV_NOT_SUPPORTED, // Устройство не поддерживается USB_MSC_DEV_WRITE_PROTECT, // Устройство защищено от записи USB_MSC_OVER_CURRENT, // Перегрузка по току USB_MSC_DEV_CONNECTED // Устройство подключено и готово }USB_MSC_HOST_STATUS_t;
Функции:
void UB_USB_MSC_HOST_Init(void); // инициализировать USB-Host USB_MSC_HOST_STATUS_t UB_USB_MSC_HOST_Do(void); // проверить состояние устройства
Пример использования:
//-------------------------------------------------------------- // File : main.c // Datum : 13.04.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der USB-MSC-HOST-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_led.h" #include "stm32_ub_usb_msc_host.h" int main(void) { FIL myFile; // обработчик файлов uint8_t write_ok=0; SystemInit(); // Инициализация настроек кварца // Инициализация светодиодов UB_Led_Init(); // Инициализация USB-OTG-порта как MSC-HOST // (для чтения / записи на USB флешку) UB_USB_MSC_HOST_Init(); while(1) { // Данные о статусе USB if(UB_USB_MSC_HOST_Do()==USB_MSC_DEV_CONNECTED) { // если USB-флешка обнаружена UB_Led_On(LED_GREEN); // Если файл еще не записан if(write_ok==0) { write_ok=1; UB_Led_On(LED_RED); //Монтировать флешку if(UB_Fatfs_Mount(USB_0)==FATFS_OK) { // Редактировать файл, записанный в корень флешки if(UB_Fatfs_OpenFile(&myFile, "USB_File.txt", F_WR_CLEAR)==FATFS_OK) { // Написать несколько строк текста в файле UB_Fatfs_WriteString(&myFile,"Test der WriteString-Funktion"); UB_Fatfs_WriteString(&myFile,"hier Zeile zwei"); UB_Fatfs_WriteString(&myFile,"ENDE"); // Закрыть файл UB_Fatfs_CloseFile(&myFile); } // Размонтировать флешку UB_Fatfs_UnMount(USB_0); } UB_Led_Off(LED_RED); } } else { // Если нет доступных USB флешек UB_Led_Off(LED_GREEN); } } }
В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_usb_msc_host_v100_rus.rar (220 Кб)
- Demo_32_USB_MSC_HOST_rus.rar (610 Кб)
Комментарии (1) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация