Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Eclipse+STM32F3 Project Template
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
gazpar
Всем привет!
Столкнулся с проблемою.Решил собственоручно запилить USB CDC(в образовательных целях).
Поставил Eclipse,установил все необходимые плагины и утилиты.Настроил среду.
Решил попользовать шаблоны STM32Fx Project Templates.Платка под руками у меня STM32F3-DISCOVERY.
Создал шаблонный проект для имеющегося камня.
А в проекте хидер stm32f30x.h содержит только RCC_CFGR_USBPRE,RCC_APB1RSTR_USBRST,SYSCFG_CFGR1_USB_IT_RMP и RCC_APB1ENR_USBEN.

Как обращаться к регистрам USB?
И возможно ли это вообще с данным шаблоном(GNU ARM C/C++ STM32Fx Project Templates)?
DrGluck
"Запилить" © ... Этимологию и топонимику - в студию ! sm.gif ...


тут уже на днях звучало -

"... конфликт поколений. Для нас, любителей пепси, всё вышеперечисленное - надуманные проблемы. Всегда можно настроить виртуалку или обточить напильником гнушный тулчейн. Такого, чтобы не было эмулятора - вообще не бывает, потому что всегда можно найти в коробке дев-борду от FTDI или вообще с ПЛИСиной, за час скомпилить и залить эмулятор джатага, а в среде пропатчить драйвера на предмет проверки "родного" адаптера. Я же говорю, простые и понятые действия. Сиди, нажимай кнопки, подсоединяй провода.
... А нынешнее поколение вообще не будет понимать, как это бывает, что у SOC-а нельзя пин запрограммировать на определённый протокол или сценарий. Будут рассказывать легендЫ ..." ©


sm.gif
DrGluck
теперь по теме sm.gif

"Как обращаться к регистрам USB?" ©

STM32F3DISCOVERY,ST Microelectronics

ФАЙЛ №1
ФАЙЛ №2


32.4 USB functional description ... страница 1061 ...
gazpar
DrGluck
Т.е. брать эти(USB peripheral registers base address 0x4000 5C00) циферки(адреса), и прописывать их в имеиющемся хидере, как регистры USB?
Потом привязывать к адресу структуру с __IO полями...

А как учесть смещение и ширину буфера при описании структуры?
Или буфер не нужно включать в структуру?

Я просто такими делами не занимался ранее.А литературу доступную не посоветуете по этой теме(написание своих низкоуровневых библиотек под периферию МК)?
Golikov A.
обычно есть хедер к процу, в котором регистры названы понятным образом, и CMSYS в этом помогает....
DrGluck
"... Я просто такими делами не занимался ранее.А литературу доступную не посоветуете по этой теме (написание своих низкоуровневых библиотек под периферию МК) ... " ©

- вот это уже лучше ...

Занимаешься EMBEDDED - копай ... Причем "копай" © - с Пониманием, что и как в каждый момент происходит ...
Иначе чем ты отличаешься от 1С-ника ? ...

Доступная литература ? ну раз RM - пугает или отталкивает, то есть смысл начать с русскоязычных ресурсов :

Микроконтроллеры STM32 «с нуля»

( год 2011 )

"Golikov * обычно есть хедер к процу, в котором регистры названы понятным образом, и CMSYS в этом помогает...." ©

P.S. Дьявол скрыт в мелочах ... sm.gif

CMSIS - Cortex Microcontroller Software Interface Standard
Golikov A.
Цитата
Занимаешься EMBEDDED - копай ... Причем "копай" © - с Пониманием, что и как в каждый момент происходит ...
Иначе чем ты отличаешься от 1С-ника ? ...

Цитата
P.S. Дьявол скрыт в мелочах ...


Вы что ли посты себе набиваете?


Думаю куб должен файлик заголовочный основной генерить.
gazpar
DrGluck,
Нет, RM не пугает.Наоборот даже,цели образовательные.Хотелось бы самому сделать.
Литературы типа "Микроконтроллеры STM32 «с нуля»" прочитал и усвоил уже достаточно.

Golikov A.,
Куб или копипаста хидера под камень- простейший вариант.Чему-то новому для себя так не научиться.

Главный вопрос был в том,чтобы выяснить кривые у меня руки(что я как-то неправильно создаю проект в Eclipse, да так,что нема регистров USB в шаблонном проекте от GNU) или это такие шаблоны.
На этот вопрос ответ нашёл в README.txt шаблонного проекта.

Теперь у меня и цель сформулировалась.

Камней всяких разных у ST(да и не только) целая куча.Под эту кучу камней есть свои собственные хидера.При создании хидера(типа stm32f4xx.h) в нём описывают всю периферию,регистры и варианты битов,которыми можно наполнить регистры(типа GPIO_BRR_BR_0) для настройки.

Так вот хотелось бы увидеть труд/книгу/цикл статей,которые описывают концепцию создания таких хидеров.И, если получится,самому сделать хидер с описанием USB для STM32F3. Т.е. подпилить(дополнить) хидер имеющийся в шаблонном проекте от GNU.
А потом реализовать CDC.
Сергей Борщ
Цитата(gazpar @ Aug 27 2015, 05:40) *
Так вот хотелось бы увидеть труд/книгу/цикл статей,которые описывают концепцию создания таких хидеров.
Тоже хотелось бы узнать, что курят их авторы. Вот мой для usb F107:

CODE
struct otg_fs
{
struct global
{
uint32_t volatile GOTGCTL; // OTG control and status 0x000
uint32_t volatile GOTGINT; // OTG interrupt flags 0x004
uint32_t volatile GAHBCFG; // AHB configuration 0x008
uint32_t volatile GUSBCFG; // USB configuration 0x00C
uint32_t volatile GRSTCTL; // Core reset 0x010
uint32_t volatile GINTSTS; // Core interrupt flags 0x014
uint32_t volatile GINTMSK; // Core interrupt mask 0x018
uint32_t volatile GRXSTSR; // Receive status debug read 0x01C
uint32_t volatile GRXSTSP; // OTG status read and pop 0x020
uint32_t volatile GRXFSIZ; // Receive FIFO size 0x024
uint32_t volatile DIEPTXF0_HNPTXFSIZ; // Non periodic / EP0 Tx FIFO size 0x028
uint32_t volatile HNPTXSTS; // Non periodic Tx FIFO/queue status 0x02C
uint32_t reserved30[2]; // Reserved 0x030
uint32_t volatile GCCFG; // General core configuration 0x038
uint32_t volatile CID; // Product ID 0x03C
uint32_t reserved40[48]; // Reserved 0x040-0xFF
uint32_t volatile HPTXFSIZ; // Host periodic Tx FIFO size 0x100
uint32_t volatile DIEPTXF[3]; // Device IN endpoint Tx FIFO size 0x104
uint32_t reserved110[188]; // Reserved 0x110-0x3FF
};

struct host
{
uint32_t volatile HCFG; // Configuration 0x400
uint32_t volatile HFIR; // Frame interval 0x404
uint32_t volatile HFNUM; // Frame number/time remaining 0x408
uint32_t reserved40C; // Reserved 0x40C
uint32_t volatile HPTXSTS; // Periodic Tx FIFO / queue status 0x410
uint32_t volatile HAINT; // All channels interrupt flags 0x414
uint32_t volatile HAINTMSK; // All channels interrupt Mask 0x418
uint32_t reserved41C[9]; // Reserved 0x41C-0x43F
uint32_t volatile HPRT; // Port control and status 0x440
uint32_t reserved444[47]; // Reserved 0x444-0x4FF
struct
{
uint32_t volatile HCCHAR; // Characteristics 0x500, 0x520...0x5E0
uint32_t reserved504; // Reserved 0x504
uint32_t volatile HCINT; // Interrupt flags 0x508
uint32_t volatile HCINTMSK; // Interrupt mask 0x50C
uint32_t volatile HCTSIZ; // Transfer size 0x510
uint32_t reserved[3]; // Reserved 0x514-0x51F
} Channel[8];
uint32_t reserved600[128]; // Reserved 0x600-0x7FF
};

struct device
{
uint32_t volatile DCFG; // Configuration 0x800
uint32_t volatile DCTL; // Control 0x804
uint32_t volatile const DSTS; // Status 0x808
uint32_t reserved0C; // Reserved 0x80C
uint32_t volatile DIEPMSK; // IN endpoint interrupt mask 0x810
uint32_t volatile DOEPMSK; // OUT endpoint interrupt mask 0x814
uint32_t volatile DAINT; // All endpoints interrupt flags 0x818
uint32_t volatile DAINTMSK; // All endpoints interrupt mask 0x81C
uint32_t reserved820[2]; // Reserved 0x820-0x827
uint32_t volatile DVBUSDIS; // VBUS discharge time 0x828
uint32_t volatile DVBUSPULSE; // VBUS pulsing time 0x82C
uint32_t reserved830; // Reserved 0x830
uint32_t volatile DIEPEMPMSK; // IN endpoint FIFO empty mask 0x834
uint32_t reserved838[50]; // Reserved 0x838-0x8FF
struct in_ep
{
uint32_t volatile DIEPCTL; // Control 0x900, 0x920, 0x940, 0x960
uint32_t reserved904; // Reserved 0x904
uint32_t volatile DIEPINT; // Interrupt flags 0x908
uint32_t reserved90C; // Reserved 0x90C
uint32_t volatile DIEPTSIZ; // Transfer size 0x910
uint32_t reserved914; // Reserved 0x914
uint32_t volatile DTXFSTS; // Tx FIFO status 0x918
uint32_t reserved91C; // Reserved 0x91C
} IN_endpoint[4];
uint32_t reserved980[32 + 64]; // Reserved 0x980-0xAFF
struct out_ep
{
uint32_t volatile DOEPCTL; // Control 0xB00, 0xB20, 0xB40, 0xB60
uint32_t reservedB04; // Reserved 0xB04
uint32_t volatile DOEPINT; // Interrupt flags 0xB08
uint32_t reservedB0C; // Reserved 0xB0C
uint32_t volatile DOEPTSIZ; // Transfer size 0xB10
uint32_t reservedB14[3]; // Reserved 0xB14-0xB1F
} OUT_endpoint[4];
uint32_t reservedB80[32 + 128]; // Reserved 0xB80-0xDFF

struct generic_ep
{
uint32_t volatile CTL; // Control 0x00
uint32_t reserved04; // Reserved 0x04
uint32_t volatile INT; // Interrupt flags 0x08
uint32_t reserved0C; // Reserved 0x0C
uint32_t volatile TSIZ; // Transfer size 0x10
uint32_t reserved14[3]; // Reserved 0x14-0x1F
};
};

struct gating
{
uint32_t volatile PCGCR; // Power and clock gating 0xE00
uint32_t reservedE04[127]; // Reserved 0xE04-0xFFF
};

struct fifo
{
uint32_t volatile FIFO; // FIFO data 0x1000
uint32_t Reserved[1023]; // Reserved 0x1004-0x1FFF
};

struct rx_fifo : public fifo
{
public:
void * read(void * to, uint_fast16_t size);
};

struct tx_fifo : protected fifo
{
public:
void write(void const * from, uint_fast16_t size);
};

global Global;
host Host;
device Device;
gating Gating;
union
{
rx_fifo Rx_FIFO;
tx_fifo Tx_FIFO[8];
};
};

gazpar
Сергей Борщ,
Благодарствую.

В общем, Template'ы от GNU слишком громоздки.
Сразу же в шаблонный проект вешают свою операционку uC/Linux III.
Ещё парился,что вроде всего ничего кода то написал,а занимает 17 кБ прошивка.

Собрал собсвтеноручно проект вместе с операционкой(три таска мигающие светодиодами), занимает 6488 Б.


Golikov A.
Цитата
Куб или копипаста хидера под камень- простейший вариант.Чему-то новому для себя так не научиться.

Что-то я перестал понятно писать что ли....

АРМ фирма что делает ядро, провела некоторую работу и создала писание некого стандарта CMSIS. В результате этого действа переход между процами разных производителей на одном ядре АРМ проходит более гладко. Потому что у всех теперь практически единая система наименования регистров и даже если есть отличия, то они минимальны и понятны.

В результате к каждому процу есть заголовочный файл в котором близко к этому стандарту уже наименованы все регистры проца, каждому адресу в циферках стоит правильное имя. Кейлы и IAR дают этот файл, как выбираете семейство проца. Я предположил что для эклипса это не так, но этот же файл должен дать куб.

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

Дальнейшие сборы правильных регистров в структуры и прочее - это уже ваше дело. Обычно я в своих проектах их не собираю, пишу единый С файл работы с модулем, такой некий драйвер, и там к регистрам обращаюсь напрямую по именам.


Я предлагал только это в ответ на
Цитата
Т.е. брать эти(USB peripheral registers base address 0x4000 5C00) циферки(адреса), и прописывать их в имеиющемся хидере, как регистры USB?

а использование полностью библиотек куба - это на ваше усмотрение, конечно, но по мне они ужасны...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.