реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Eclipse+STM32F3 Project Template
gazpar
сообщение Aug 26 2015, 13:09
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Всем привет!
Столкнулся с проблемою.Решил собственоручно запилить 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)?
Go to the top of the page
 
+Quote Post
DrGluck
сообщение Aug 26 2015, 13:28
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-11-05
Из: Россия
Пользователь №: 11 361



"Запилить" © ... Этимологию и топонимику - в студию ! sm.gif ...


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

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


sm.gif

Сообщение отредактировал DrGluck - Aug 26 2015, 14:26


--------------------
"... Ищущий вечно, однажды найдя, то, что искал бесконечно, мимо прошёл, совершенно беспечно, с кем-то о вечном шутя ..."
Go to the top of the page
 
+Quote Post
DrGluck
сообщение Aug 26 2015, 14:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-11-05
Из: Россия
Пользователь №: 11 361



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

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

STM32F3DISCOVERY,ST Microelectronics

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


32.4 USB functional description ... страница 1061 ...


--------------------
"... Ищущий вечно, однажды найдя, то, что искал бесконечно, мимо прошёл, совершенно беспечно, с кем-то о вечном шутя ..."
Go to the top of the page
 
+Quote Post
gazpar
сообщение Aug 26 2015, 16:00
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



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

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

Я просто такими делами не занимался ранее.А литературу доступную не посоветуете по этой теме(написание своих низкоуровневых библиотек под периферию МК)?

Сообщение отредактировал gazpar - Aug 26 2015, 16:03
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 26 2015, 16:42
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



обычно есть хедер к процу, в котором регистры названы понятным образом, и CMSYS в этом помогает....
Go to the top of the page
 
+Quote Post
DrGluck
сообщение Aug 26 2015, 17:57
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-11-05
Из: Россия
Пользователь №: 11 361



"... Я просто такими делами не занимался ранее.А литературу доступную не посоветуете по этой теме (написание своих низкоуровневых библиотек под периферию МК) ... " ©

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

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

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

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

( год 2011 )

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

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

CMSIS - Cortex Microcontroller Software Interface Standard

Сообщение отредактировал DrGluck - Aug 26 2015, 17:32


--------------------
"... Ищущий вечно, однажды найдя, то, что искал бесконечно, мимо прошёл, совершенно беспечно, с кем-то о вечном шутя ..."
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 26 2015, 19:52
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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


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


Думаю куб должен файлик заголовочный основной генерить.
Go to the top of the page
 
+Quote Post
gazpar
сообщение Aug 27 2015, 02:40
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



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

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

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

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

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

Так вот хотелось бы увидеть труд/книгу/цикл статей,которые описывают концепцию создания таких хидеров.И, если получится,самому сделать хидер с описанием USB для STM32F3. Т.е. подпилить(дополнить) хидер имеющийся в шаблонном проекте от GNU.
А потом реализовать CDC.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 27 2015, 08:07
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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];
};
};



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
gazpar
сообщение Aug 27 2015, 10:42
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



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

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

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


Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 28 2015, 03:25
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

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

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

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

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


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

а использование полностью библиотек куба - это на ваше усмотрение, конечно, но по мне они ужасны...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016