Найти тему

Подключаем USB на STM32. Программная часть

Оглавление
Подключим же USB классом CDC
Подключим же USB классом CDC

Настроив проект в STM32CubeMx, тип устройства выберем USB Device Communication Device Class, мы можем сгенерировать программные файлы.

Устройство будет появляться в диспетчере устройств в виде COM-порта, если будет подключаться к ОС Windows.

В целях обучения выберем Makefiles и нажмем сгенерировать проект.

Проектные файлы

"USB_DEVICE/App/usb_device.c" --

исходный файл, отвечающий за инициализацию устройства USB. В нем по очереди вызываются функции:

USBD_Init -- инициализация библиотеки устройства и структуры, отвечающей за само устройство USB

USBD_RegisterClass -- выбор типа USB устройства, которое будет использоваться.

USBD_CDC_RegisterInterface -- активация программного интерфейса USB

USBD_Start -- активация всего программно-аппаратной системы USB.

"USB_DEVICE/App/usbd_desc.c"

Здесь интересны дефайны, которые будут показываться при работе с интерфейсом.

#define USBD_MANUFACTURER_STRING "STMicroelectronics"

#define USBD_PRODUCT_STRING_FS "STM32 Virtual ComPort"

source "USB_DEVICE/App/usbd_cdc_if.c"

Описывают функции в выбранном интерфейсе CDC: инициализацию, деинициализацию, отправку данных и прием.

Для изучения особенно интересна функция CDC_Control_FS, которая работает с запросами в соответствии с протоколом.

Также в этом файле содержатся самые важные в практическом плане функции, которые необходимы разработчику для работы через этот интерфейс.

Функция CDC_Transmit_FS позволит отправить пакет данных по протоколу.

А функция CDC_Receive_FS предназначена для приема данных по протоколу.

"USB_DEVICE/Target/usbd_conf.c"

Исходный код аппаратного обеспечения интерфейса USB:

  • Инициализация часов, периферии и GPIO
  • Инициализация регистров интерфейса
  • Реализация прерываний

Например, реализация для embox. Кратко тут, более полно тут.

static irq_return_t eventUsbOTGFS_IRQhandler(unsigned int irq_nr, void *data)
{
HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
return IRQ_HANDLED;
}
STATIC_IRQ_ATTACH(67, eventUsbOTGFS_IRQhandler, NULL);

Для FreeRTOS и прочих вариантов нужно определить соответствующую функцию, которая будет вызывать функцию HAL_PCD_IRQHandler для корректной работы программного обеспечения.

  • Аппаратных отправки и получения данных

Файлы вспомогательного обеспечения

"Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c"

К этим файлам обращается модуль из файла usb_device. Описывается инициализация интерфейса.

"Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c"

Обработчик стандартных запросов протокола USB.

"Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c"

Функции ввода/вывода по каналу передачи данных интерфейса USB.

"Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c"

Описывается инициализация класса CDC, основные пакеты этого класса, а также аппаратные функции передачи данных.

Скачать файлы можно здесь.