Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/55: Рейтинг темы: голосов - 55, средняя оценка - 4.69
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
1

Библиотеки STM32? Пост гнева.

30.04.2016, 20:56. Просмотров 9893. Ответов 25
Метки нет (Все метки)

Парни, это же просто ужас какой-то.
Вот описание регистра из Reference Manual.


<Изображение удалено>

А это - фрагмент конфигурации!
Код
TYM1->DIER |= TIM_DIER_UIE;
Я потратил целый день, чтобы разобраться в готовом (!) фрагменте конфигурации таймера и заставить светодиод мигать с нужной частотой в режиме ШИМ!
Уже позже я понял, что в готовом фрагменте не было настройки тактирования порта GPIO, а в примерах из интернета не включалось тактирование альтернативных функций порта.
Не говоря уже про SystemInit();.
И это только начало мучений, потому что нужно настроить события, DMA, SPI, прерывания, и на каждый регистр нужно перелопачивать кучу исходников, чтобы догадаться, как они обозвали тот или иной бит.

Может, где-то есть библиотека описания регистров периферии, чтобы можно было писать в стиле AVR:
Код
TYM1_DIER |= (1<<UIE)
Кто как выходит из положения?

Или стоит сразу переходить на изделия TI?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2016, 20:56
Ответы с готовыми решениями:

STM32 библиотеки для Diptrace
Добрый день, если у кого библиотеки Diptrosi для stm32f0xx, если не трудно...

неработает f_mount и f_open библиотеки FatFS STM32
Вот код который я запускаю. result = f_mount(&amp;fileSystem, &quot;0&quot;, 0); if...

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не...

Чем связать STM32 + STM32 в одном корпусе?
Есть 2 платы: (1) - STM32 (Вывод на LCD + запись SD) и (2) - STM32F4 (обработка...

STM32 - STM32 I2C
*****ПРОБЛЕМА ИСПРАВЛЕНА****ОТВЕТ НИЖЕ , НЕ ВЧИТЫВАЙТЕСЬ В КОД...

25
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
30.04.2016, 21:19 2
ну как сказать ...
Лично я начинал с ST-шных примеров. Да, они на SPL (некоторым религия не позволяет его использовать), да в SPL есть недостатки, зато в их примерах мне не попадались ляпы типа "забыли включить чего-то там".

Насчёт SystemInit();. Это просто надо знать :)
Платные IDE, типа IAR, Keil содержат её вызов в стартовом коде до запуска main. Соответственно, в main вызывать её необязательно. Те же ST-шные примеры идут под IAR и Keil, в main эта функция не вызывается.

В Coosox с этим наблюдается некоторый бардак - для некоторых процов она вызывается в стартовом коде, в некоторых - нет. Поэтому 2 варианта - либо проверять на месте, либо всегда вызывать её в main (хуже не будет).
Лично я всегда проверяю. Так надёжнее.

Ну а примеры из интернета - моё имхо - всегда ожидайте там ошибок. Они, конечно, далеко не всегда там есть, но иногда попадаются.

Про TI. Вы уверены, что все авторы, пишущие про них, никогда не забывают где-то что-то включить в каких-то там регистрах? Я - нет. Все люди одинаковые и все могут ошибаться. Вне зависимости о типа проца, о котором они пишут.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
30.04.2016, 21:51 3
Так-то оно так.

Только мне тут стало нехватать avr (cовсем чуточку), но после 3-х дней борьбы с stm8 (кстати, в итоге сам написал дефайны для нужных регистров) и еще 2-х дней с stm32, возникает желание вернуться на avr (а нужна мне всего-навсего непрерывная выдача через spi) и скомпенсировать недостатки периферии внешней логикой.

Потому что если скорость разработки на stm32 радикально не увеличить, затраты времени на разработку превзойдут дороговизну avr и увеличение количества корпусов в мелкой серии, которую я хочу сделать.

Вот такая дилемма сейчас.

А про TI, в первую очередь, пишут о качестве библиотек и документации. К тому же у меня есть какая-то платка времен перехода от stellaris к tiva-c с небольшим cortex-m на борту и встроенным отладчиком. Соосох даже этот проц поддерживал, вроде.
Попробую в свободное время светодиодом помигать.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,114
30.04.2016, 23:21 4
omtomtubo, вот по этому плохо разводить зверинец аппаратуры. Возьмите что-то одно (STM32F030F4), настройте на него конфигурацию железа и используйте только его. Метания STM8<>STM32 добром не кончатся.
Лично я пишу на уровне портов, бэээээ-з каких-то бЫблотек. Долго - да, но зато все ошибки мои собственные. ))
Всё равно, без _четкого_ понимания, как именно работает железо, ничего путного не сделать. Изучайте железо, без этого никак.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
30.04.2016, 23:33 5
Я тоже, по привычке, хотел писать на уровне регистров.
Но имен регистров, которые описаны в даташите, в хедерах нет. Как и имен битов этих регистров.
Возникает какой-то-там диссонанс и хочется все бросить.
Хотя периферия мощная (и сложная, после авр), да.

А железо я привык изучать применительно к решению задачи.
Надо шим-сигнал сформировать - изучаем тактирование и секцию таймера.
Надо spi - добавим секцию spi. И так далее.

Написать конфигурационный файл самому?
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
30.04.2016, 23:36 6
Цитата Сообщение от omtomtubo
Но имен регистров, которые описаны в даташите, в хедерах нет. Как и имен битов этих регистров.
Приведите пример. Какой проц, регистр, бит и прочее?
0
OVY-srok
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
30.04.2016, 23:39 7
Цитата Сообщение от omtomtubo
Потому что если скорость разработки на stm32 радикально не увеличить, затраты времени на разработку превзойдут дороговизну avr и увеличение количества корпусов в мелкой серии, которую я хочу сделать.
Есть два чётких уровня: уровень железа, и код на С.
Уровень железа для каждого чипа уникальный, просто на авр и пиках за вас эту работу уже сделали. Для st получился большой бардак с огромным количеством успешных реализаций уровня железа. Можно разбираться, но проще писать своё. Даже банальный spi может гулять по половине ног мк - сохраняя полную функциональность.

А вот код на С может и обязан быть универсальным. И в случае когда в вашем коде используется ваша функция железного уровня - перенос программы на другой камень будет очень лёгким. Потребуется переписать всего одну функцию.
У меня код работает на всей линейке чипов от м0 до м7. А вот драйвера приходится переписывать каждый раз.

И да, stm8 - не лучший выбор.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
01.05.2016, 00:00 8
Цитата Сообщение от hd44780
Приведите пример. Какой проц, регистр, бит и прочее?
В первом посте привел.
Посмотрите, как называются регистр и его биты в даташите.
А в коде конфигурации?

Я смотрю в даташит. Пишу название регистра.
А такое название в инклюдах отсутствует. Ступор.

Цитата Сообщение от OVY-srok
Есть два чётких уровня: уровень железа, и код на С.
Уровень железа для каждого чипа уникальный, просто на авр и пиках за вас эту работу уже сделали. Для st получился большой бардак с огромным количеством успешных реализаций уровня железа. Можно разбираться, но проще писать своё. Даже банальный spi может гулять по половине ног мк - сохраняя полную функциональность.

А вот код на С может и обязан быть универсальным. И в случае когда в вашем коде используется ваша функция железного уровня - перенос программы на другой камень будет очень лёгким. Потребуется переписать всего одну функцию.
У меня код работает на всей линейке чипов от м0 до м7. А вот драйвера приходится переписывать каждый раз.

И да, stm8 - не лучший выбор.
У меня с написанием универсального кода пока не очень. Структуру платформо-независимого кода я понимаю, только до сих пор задачи были настолько привязаны к периферии, что по сути почти никакого кода не содержали.

Поэтому переписывание программы сводится к настройке периферии. А здесь конкретная засада.

Тот stm8, что я щупал, отличается от avr незначительно, как раз непрерывным SPI и чуть более навороченными таймерами. Но, поскольку задача целиком в него все равно не влазит, взял stm32. Его-то точно хватит.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
01.05.2016, 00:14 9
А конкретно модель процессора?
Берем библиотеку куба под него, вытаскиваем хидер, там все регистры и биты расписаны дефайнами, вполне себе вменяемо.
Например под STM32T151RD, берем хидер stm32l151xd.h, смотрим, там есть:
Код
/*******************  Byt defymition for TIM_DIER rikystir  *******************/
#define  TIM_DIER_UIE                        ((uint32_t)0x00000001)            /*!<Update interrupt enable */
Ну и вообще принцип именования общий: ПЕРИФЕРИЯ_РЕГИСТР_БИТ.
В хидерах, что идут с SPL, там да, было дело, что порой не вся периферия была, пример из L151 - нет USB. Но в кубовских хидерах все есть, не замечал, чтобы чего-то не хватало.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,114
01.05.2016, 00:15 10
omtomtubo, всё понятно. ))
А теперь вЫключайте эмоции и включайте голову. В STM** очень мощная периферия. Может ли встречаться где-нибудь слово "UIE"?
Сэкономлю время, отвечу сам - вполне вероятно, "interrupt enable" все-же иногда встречается.
Итак, как же тогда должна выглядеть запись, чтобы она И совпадала с описанием железа И гарантированно была уникальной?
Я думаю, вариант "UIE123423" мы рассматривать не будем, да? ))
Т.о., в название бита должно входить И название девайса И название регистра И название бита. Теперь смотрим, как это описано в .h
TIM_DIER_UIE
Какие замечания к определению? ВЫ можете описать более естественно? ...

Да, противно, но без этого не так. Сие не AVR, здесь железа больше.
0
vt340
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
01.05.2016, 00:26 11
Цитата Сообщение от omtomtubo
Я смотрю в даташит. Пишу название регистра.
А такое название в инклюдах отсутствует. Ступор.
Да всё правильно говорите - полный бардак, особенно на свежий взгляд, а потом просто привыкаешь )
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
01.05.2016, 00:26 12
Цитата Сообщение от u37
omtomtubo, всё понятно. ))
А теперь вЫключайте эмоции и включайте голову. В STM** очень мощная периферия. Может ли встречаться где-нибудь слово "UIE"?
Сэкономлю время, отвечу сам - вполне вероятно, "interrupt enable" все-же иногда встречается.
Итак, как же тогда должна выглядеть запись, чтобы она И совпадала с описанием железа И гарантированно была уникальной?
Я думаю, вариант "UIE123423" мы рассматривать не будем, да? ))
Т.о., в название бита должно входить И название девайса И название регистра И название бита. Теперь смотрим, как это описано в .h
TIM_DIER_UIE
Какие замечания к определению? ВЫ можете описать более естественно? ...

Да, противно, но без этого не так. Сие не AVR, здесь железа больше.
Логично. Спасибо за объяснение.
Буду разбираться дальше.
Прерывание одно вроде бы написал, завтра подключу осциллограф, посмотрю, как работает.
0
omdy123
0 / 0 / 0
Регистрация: 04.10.2011
Сообщений: 89
04.05.2016, 12:07 13
Цитата Сообщение от u37
omtomtubo, всё понятно. ))
А теперь вЫключайте эмоции и включайте голову. В STM** очень мощная периферия. Может ли встречаться где-нибудь слово "UIE"?
Сэкономлю время, отвечу сам - вполне вероятно, "interrupt enable" все-же иногда встречается.
Итак, как же тогда должна выглядеть запись, чтобы она И совпадала с описанием железа И гарантированно была уникальной?
Я думаю, вариант "UIE123423" мы рассматривать не будем, да? ))
Т.о., в название бита должно входить И название девайса И название регистра И название бита. Теперь смотрим, как это описано в .h
TIM_DIER_UIE
Какие замечания к определению? ВЫ можете описать более естественно? ...

Да, противно, но без этого не так. Сие не AVR, здесь железа больше.
Вот и выросло поколение для которого даташит и исходный код имеют сакральную нигическую связь внутри IDE. А вот если бы относились к исходнику как просто тексту в котором есть слова из букв, просто бы тупо взяли бы и "грепнули" по "TIM" "DIER и UIE. Вот именно поэтому все эти IDE зло намного большее чем кубы и библиотеки.
0
dork_usir
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
04.05.2016, 12:39 14
РСишный детский сад... какой-то... ))))))
В этих либах и кубах... дым индуского ганджубаса не выветрился... но пипл хавает... )))))
0
dork_usir
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
04.05.2016, 12:42 15
Цитата Сообщение от omtomtubo
после 3-х дней борьбы с stm8 (кстати, в итоге сам написал дефайны для нужных регистров)
Там по другому... ну никак... но оно того стоит... Благо СТМ8 просты...
0
MrYurom
0 / 0 / 0
Регистрация: 25.01.2012
Сообщений: 492
04.05.2016, 12:46 16
Цитата Сообщение от omtomtubo
Может, где-то есть библиотека описания регистров периферии, чтобы можно было писать в стиле AVR:
Код:
TYM1_DIER |= (1<<UIE)
Если уж взялись за STM, забудьте про AVR.
Тут все на порядок хитрее, но и гибчее тоже.

А мне наоборот нравится SPL.
По большей части даже мануал можно не открывать, ибо полнейший дескрипшн, типа
Код
/**
* @brief  Enables or disables the specified SPI/I2S interrupts.
* @param  SPIx: where x can be
*   - 1, 2 or 3 in SPI mode
*   - 2 or 3 in I2S mode
* @param  SPI_I2S_IT: specifies the SPI/I2S interrupt source to be enabtid or disabtid.
*   This parameter can be one of the following values:
*     @arg SPI_I2S_IT_TXE: Tx buffer empty interrupt mask
*     @arg SPI_I2S_IT_RXNE: Rx buffer not empty interrupt mask
*     @arg SPI_I2S_IT_ERR: Error interrupt mask
* @param  NewState: new state of the specified SPI/I2S interrupt.
*   This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState)
Уж я не знаю, что тут ещё можно приписать.

Навичак смотрит и сразу, с пеленок, приобщается к культуре.
А не к тому непотребству, которому учат учебники по AVR
Да и не по AVR тоже
0
Moyk
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 237
04.05.2016, 12:59 17
Цитата Сообщение от omtomtubo
на каждый регистр нужно перелопачивать кучу исходников, чтобы догадаться, как они обозвали тот или иной бит.
На картинке в первом сообщении видно что название битов должно начинаться с TIMx_DIER. Логично предположить что полное название бита UIE будет TIMx_DIER_UIE, что подтверждается кодом из первого сообщения.
Код
TYM1->DIER |= TIM_DIER_UIE;
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
04.05.2016, 14:28 18
Я сам в свое время потратил довольно много времени и сил на исправление ошибок в библиотеках STM32, не знаю, как сейчас, но несколько лет назад они были ужасны и по внутренней структуре, и по количеству багов. Все это усугубляется документацией весьма среднего качества и организации. Как результат - сроки и трудоемкость разработки на STM32 существенно выше, чем на сравнимых чипах от TI и Silabs. Именно поэтому я стараюсь их не использовать, хотя сами чипы неплохи.

Если у вас не очень большие серии, переходите лучше на стелларисы или гекконы.

Если скорость и трудоемкость разработки критически важна, например для прототипирования или любительских проектов, то лучший вариант PSoC от Cypress, разница в трудоемкости разработки может быть на порядок.

Глубоко интегрированные IDE на самом деле плюс, а не минус, современные чипы сложны, и "классический" подход, как минимум, непродуктивен. А многие вещи без хорошей интегрированной среды разработки вообще сделать практически нельзя.

Популярность той или оной архитектуры среди любителей не значит практически ничего - даже все совокупные усилия сообщества не заменят нормальной поддержки со стороны производителя. Большие и активные сообщества часто возникают как раз там, где такой поддержки со стороны производителя нет, отличный пример - тот идиотизм, который много лет происходил вокруг AVR. Сейчас ситуация во многом повторяется с STM32, причем выглядит еще идиотичнее, по причине наличия массы гораздо более приемлемых альтернатив.
0
shibtym
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 268
04.05.2016, 14:34 19
Я тоже, по привычке, хотел писать на уровне регистров.
крякнешь.
да и зачем? слишком много их там... эволюционируй, а то будещь как досикус :)

свою картину по таймерам я тут http://forum.iosyitistromyss.ru/viewtopys.php?f=7&t=26335 выкладывал
0
dork_usir
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
04.05.2016, 15:34 20
Какая картинка... ни о чём... ))))

Я фигею... с поголовного сумасшедствия... Гибкая периферия... и либы... Групповой разрыв шаблона???
И ваще... не надоело ещё... продвигать гнусные либы??? Уже сколько раз обсуждалось... и снова... "здравствуйте"... )))
0
04.05.2016, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2016, 15:34

stm32 + FSMC + stm32
Доброе времени суток. Возможно ли к Ftosh памяти подцепить два Stm32F4. Один...

Diablo 2: Гроздья гнева. Как увеличить разрешение до 1024x768?
Кто знает? И в подробностях, если не затруднит.

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin')
какие библиотеки нужны для функций 'cout' и 'cin' ???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru