Шаг №1. Работа с USB
Чтобы осуществлять работу с USB, используем библиотеку ub_msc_host_lib автора UB.
В данной библиотеке нас интересуют следующие файлы:
stm32_ub_usb_msc_host.c
stm32_ub_usb_msc_host.h
stm32_ub_fatfs.h
stm32_ub_fatfs.c
В проект необходимо целиком включить папки fatfs и usb_msc_host_lolevel.
fatfs - библиотека от Chan, позволяющая работать с файловой системой Fat.
usb_msc_host_lolevel - библиотека от stm, необходимая для работы с usb. Собственно UB в своей библиотеке ub_lib удобно написал функции инициализации usb-хоста и работы с файлами файловой системы fatfs.
Собственно функция ub_usb_msc_host_Init() осуществляет инициализацию usb-хоста.
Для корректной работы usb необходимо установить значения #define PLL_M 8 в файле system_stm32f4xx.c и #define hse_value ((uint32_t)8000000) в файле stm32f4xx.h.
Также очень удобна функция ub_usb_msc_host_do(). Она позволяет определить подключены ли устройства к usb - хосту.
Перечисление состояний usb-хоста можно найти в файле stm32_ub_usb_msc_host.h.
Еще нам необходима функция UB_Fatfs_Mount(USB_0). Она монтирует файловую систему fat и в качестве параметра принимает устройство. В нашем случае устройство определено библиотекой ub_lib - устройство USB_0.
И нам необходимо использовать системную функцию SystemInit() - инициализация тактирования системных генераторов тактовых частот.