Создаем первый проект USB на LPC1768 под SEGGER Embedded Studio

Берем старую ненужную плату от принтера и на ней экпериментируем

фотка 1

Качаем поддержку LPC1768 на сайте segger.com(называется ESPRO)

Не помню где на segger.com качается это , но в результате у вас в каталоге pakages появится папка ESPRO :
(у меня) C:\Users\p\AppData\Local\SEGGER\SEGGER Embedded Studio\v3\packages\ESPRO .

Именно здесь и будем собирать *.h (заголовочные) , *.с (исходники) и *.a (библиотеки) файлы и по одному добавлять в наш новый проект.
Кстати *.a - это архивы файлов *.o и там есть файл с описанием содержания.

Важный момент IDE Embedded Studio

Все настройки сборки, отладки смотрите (и редактируйте) прямо в файле проекта хххххххх.emProject . Тут все в текстовом xml формате, удобно можно проекты друг с другом сравнивать.

Далее мы не подключаем в проекте напрямую embUSB-Device или embOS, а тащим в проект по одному нужные *.h,*.c,*.a файлы

Для начала добавляем в проект файл usb.h и начинаем раскручивать зависимости с USB.h. Создаем ветку в проекте USBD и кидаем туда все , что необходимо для компиляции usb...

USB.h
USB_ConfDefaults.h
USB_OS_embOS.c
USB_Config_SEGGER_LPC1768.c
libusbd_v7m_t_le_d.a
libusbd_v7m_t_le_r.a
....
фотка 2

Выясняется , что использование embOS очень рекомендуется SEGGER и нам , чтобы не убирать весь код из embUSB-Device , связанный с embOS, проще файлы embOS найти и использовать.

Чтобы использовать embUSB-Device надо сначала подключить EmOS

Тут все очень просто получилось . Тащим все , что связано с OS из каталогов C:\Users\p\AppData\Local\SEGGER\SEGGER Embedded Studio\v3\packages\ESPRO\OS в ветку проекта OS

OS_Error.c
RTOS.h
libos_v7m_t_le_d.a   // библиотека os именно для Cortex-M3 (v7m) для отладки
libos_v7m_t_le_r.a    // то же самое только для окончательно сборки release
фотка 3

Минимальный проект с embOS сразу собирается нормально , прошивается ,отлаживает с JLink без проблем.

Чтобы использовать наш контроллер надо тащить файлы с описанием контроллера LPC1768

Создаем , как это делается в других примерах, ветку CMSIS и кидаем туда файлы:

LPC17xx.h
system_LPC17xx.h
system_LPC17xx.c

фотка 4

Далее выясняется , что для embUSB-Device надо файлы SEGGER перетащить в новый проект

SEGGER.h и сопутствующие файлы - это для отладки / трассировки очень полезный функционал, добавляем его

фотка 5

И еще минимальный набор ассемблерных файлов для настройки старта контроллера

Файлы связанные со стартом контроллера :

LPC176x5x_Vectors.s
LPC1700_Startup.s
thumb_crt0.s
фотка 6

Последний затык решен - в режиме DEBUG переполнение системного стека

После подключения USB попадали (именно только в режиме Debug) в функцию :
OS_Error(OS_STATUS ErrCode) with OS_ERR_SYS_STACK

фотка 7

Служба поддержки на форуме помогла в течении 1 часа . Надо было просто увеличить системный стек :

фотка 8

Также Segger-овцы объяснили принцип разработки : Release версия не контроллирует переполнение стека . Т.е. все сначала обязательно надо отлаживать в Debug режиме , т.к. Debug по сравнению с Release естественно больше расходует памяти, стека и т.д.

Идеалогия Embedded Studio

По идеалогии Embedded Studio весь код по разным типам USB разбросан по разным файлам: USB_CDC_Echo.c , USB_HID_Keyboard.c , USB_Printer.c , USB_HID_Mouse.c ....

Процесс до полного готового решения USB-HID получился долгий , так как надо было собрать все необходимые файлы по одному, но зато мы получили полностью автономный проект (без внешних зависимостей) и его можно скачать на этой странице ниже....

Бери далее подключай к своему проекту , меняй минимум кода и все работает!


Полностью рабочий готовый проект будет приложен ниже

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

В проекте можно просто подключать на выбор один из файлов USB_CDC_Echo.c , USB_HID_Keyboard.c , USB_Printer.c , USB_HID_Mouse.c и вы получите сразу (без внесения дополнительных изменений) :
ГОТОВЫЙ работающий USB девайс с нужным функционалом.

Браво SEGGER!

Файлы для скачивания

* Рабочий проект свободный SEGGER Embedded Studio OS_BSP-LED_SEGGER-RTT_USB-MOUSE-KB-CRC [zip]
Можно быстро реализовать мышку, клавиатуру, CDC и любое другое USB-HID устройство