Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



STM32 USB-FS-Device 4

Сообщений 1 страница 2 из 2

1

Есть такая библиотека "STM32 USB-FS-Device 4" от STMicroelectronics http://www.st.com/en/embedded-software/ … 32121.html
Как понятно из названия, библиотека предназначена для разработки USB устройств на микроконтроллерах STM32 с аппаратным модулем USB, к которым относится STM32F103C8T6. :)
Библиотека уже не поддерживается и производитель рекомендует в место нее использовать HAL. Но ее преимущество в том что она требует намного меньше ОЗУ и Flash что тоже имеет значение.
Из архива с библиотекой был взят пример "Custom_HID" и доведен до рабочего состояния - из него выброшены участки кода для EVAL плат, а также максимально упрощен процесс добавления библиотеки в новый проект и ее конфигурации.
Сделал два примера - обмен через конечные точки и запросы Feature. http://pure-basic.narod.ru/forum_files/ … _DevIO.zip
В папках PC каждого проекта находится тестовая программа для компа. Светодиод использован имеющийся на плате, а кнопка должна быть подключена между контактом B12 и общим проводом.

Для добавления библиотеки в новый проект нужно сделать следующее.

1. Скопировать папку USB из одного из примеров архива USB_FS_Device_HID_DevIO.zip в папку проекта.
2. Добавить файлы в проект - кликнуть по проекту правой кнопкой мышки и в меню выбрать "Добавить файлы рекурсивно" и указать путь к папке USB.

Скриншот

http://sf.uploads.ru/ElRD1.png

3. Открыть файл src\Main.c и после строки #include "stm32f10x_conf.h" добавить строки

Код:
#include "hw_config.h"
#include "usb_lib.h"
#include "usb_pwr.h"
#include "HidDev_Config.h"

4. В начало функции main добавить строки.

Код:
    Set_System();
    USB_Interrupts_Config();
    Set_USBClock();
    USB_Init();

5. Открыть файл USB\inc\HidDev_Config.h и сконфигурировать библиотеку.

Код:
#define USB_VID           0x1234
#define USB_PID           0x1
#define USB_NUM           0x2   // Серийный номер устройства.

#define ENDP_IN_SIZE      1 // Размер в байтах пакета конечной точки типа Input (0 - 64). Направление из МК в ПК.
#define ENDP_OUT_SIZE     1 // Размер в байтах пакета конечной точки типа Output (0 - 64). Направление из ПК в МК.
#define ENDP_FEATURE_SIZE 0 // Размер в байтах пакета типа Feature (0 - 64). Двунаправленный обмен через нулевую конечную точку.

#define ENDP_IN_INTERVAL  32  // Интервал в миллисекундах опроса конечной точки типа Input (1 - 255).
#define ENDP_OUT_INTERVAL 32  // Интервал в миллисекундах опроса конечной точки типа Output (1 - 255).

Все, теперь можно производить обмен данными по USB. :)

Для этой цели служит ряд функций.

Код:
void HID_Receive(uint8_t *Buff, uint8_t Size)  // Прием данных от компьютера через конечную точку. Данные будут в массиве Buff размер которого указан в аргументе Size.
void HID_SendBuff(uint8_t *Buff, uint8_t Size)  // Передача пакета в комп через конечную точку.
void HID_Feature_Receive(uint8_t *Buff, uint8_t Size)  // Прием данных от компьютера через запрос Feature. Данные будут в массиве Buff размер которого указан в аргументе Size.
uint8_t HID_Feature_Send(uint8_t *Buff, uint8_t Size)  // Передача пакета в комп через запрос Feature. Данные нужно поместить в массив Buff. Функция должна вернуть не 0 если данные были помещены в массив, иначе они не будут переданы.

Только HID_SendBuff нужно вызывать из кода, а остальные функции необходимо разместить в коде (например в файле Main.c) и их будет вызывать USB библиотека когда пришли новые данные, или нужно передать данные через запрос Feature.

+3

2

Решил сравнить размеры кода с USB с использованием библиотек HAL (входит в STM32CubeMX), библиотеки "USB-FS-Device 4" и заодно mikroBasic в котором также есть USB библиотека. Для этого взял проект цветомузыки который на основе HAL и переписал его на SPL с "USB-FS-Device 4" и на микробейсик.
Размеры используемых FLASH и ОЗУ в таблице (компиляция с максимальным уровнем оптимизации).

HAL (STM32CubeMX)

USB-FS-Device 4

mikroBasic

Размер прошивки, байт

10992

6856

13920

Использовано ОЗУ, байт

4224

308

498

Как видим "USB-FS-Device 4" меньше всего требует памяти.
mikroBasic скомпилировал прошивку в два раза больше по размеру чем "USB-FS-Device 4".
HAL очень нерационально использует ОЗУ.

Несмотря на то что библиотека USB-FS-Device уже не поддерживается производителем, она наиболее подходящая для создания USB устройств. STMicroelectronics предлагает на замену ей и SPL библиотеку HAL, но как показал опыт, она нерационально расходует ресурсы МК. Кроме того не все настройки можно изменить в STM32CubeMX. Например нет возможности из куба изменить время опроса конечных точек и количество передаваемых байт. Это не вызывало бы затруднений, поскольку их можно изменить в исходнике, если бы куб не переписывал бы исходные файлы при каждой генерации проекта.

Файлы. http://pure-basic.narod.ru/forum_files/ … mb_dfs.zip

+3