STM32 Библиотеки Gyver для STM32

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,327
960
58
Марий-Эл
В работе над своими проектами столкнулся с тем, что для STM нет нормальных библиотек. То, что предлагается или слишком ущербно или слишком заумно.

Для написания прошивок иcпользую CubeIDE и стандартную библиотеку CMSIS.

Поэтому решил по мере надобности переписывать библиотеки Алекса чтобы получить более привычную среду программирования.
Для STM32F1xx и STM324xx есть готовые ядра для Arduino IDE, и для PlatformIO уже много чего есть. Но передо мной чаще всего стоит задача написать код покомпактнее используя только CMSIS без HAL.
Уже не раз сталкивался с тем, что HAL глючит.
Так как я начал делать это недавно, пока готовых у меня мало. Сегодня выложу библиотеку GyverButton.
Так как это наиболее востребованная библиотека ввода с клавиатуры на данный момент.
В наличии есть библиотеки для
LCD6002
ILI9341 через FSMC на базе Adafruit GFX.
SPI

Ну а пока библиотека. Работает она так же как и библиотека Алекса и все примеры подходят от неё. Из за особенности STM32 есть только разница в инициализации.
Например:

C++:
  // Инициализация клавиатуры
  SButton Butt_Up(SW_UP_Port, SW_UP_Pin, HIGH_PULL, NORM_OPEN);                 // Назначаем кнопку Up
  Butt_Up.setTickMode(AUTO);                                                    // Включаем для неё автоматический опрос
  SButton Butt_Down(SW_DOWN_Port, SW_DOWN_Pin, HIGH_PULL, NORM_OPEN);           // Назначам кнопку Down
  Butt_Down.setTickMode(AUTO);                                                  // Включаем для неё автоматический опрос
  SButton Butt_Set(SW_SET_Port, SW_SET_Pin, HIGH_PULL, NORM_OPEN);              // Назначаем кнопку Set
  Butt_Set.setTickMode(AUTO);                                                   // Включаем для неё автоматический опрос
На данный момент библиотека работает на кристалле STM32F030F4P6.
Так как в некоторый ядрах Cortex инициализация портов ввода вывода делается немного по разному, в будущем с помощью условной компиляции будут добавляться новые ядра, что бы библиотека стала универсальной.
Так же в ней используется функция millis() эта библиотека сразу не заработает. Эта функция была написана на отдельном таймере, что не совсем удобно. Сейчас работаю над тем, что бы на основе таймера SysTick написать основные функции работы со временем. Так то они готовы. Я не готов их выложить. Сюда не получится а GitHub я ещё не разобрался. Надеюсь на днях выложу основное ядро и структуру которую использует данная библиотека.

PS. Просьба к знающим STM по возможности указать на ошибки, если они допущены, и по мере возможности обсудить как должно выглядеть ядро для STM чтобы им было удобно пользоваться.
 

Вложения

Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,951
887
для STM нет нормальных библиотек.
не испытывал подобных проблем, почему-то. Очень многие библиотеки для АВР работают на СТМ сразу. большинство - после минимальной (2-3 строчки) правки.
Сегодня выложу библиотеку GyverButton.
Эдуард, ГайверБаттон компилируется для СТМ32 напрямую, без малейшей правки.
Если тебе очень хочется заморочится и читать пин через регистры - правятся две строчки в Button.cpp и одна Button.h
Кокретно - все что нужно поправить - это дописать после строки 39 файла .cpp аналогичный дефайн для СТМ:
C++:
#if defined(__AVR__)
        _pin_reg = portInputRegister(digitalPinToPort(_PIN));
        _bit_mask = digitalPinToBitMask(_PIN);
#endif
А ты там, как я вижу, наворотил кучу правок, на мой взгляд абсолютно не нужных...
 
Изменено:

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,327
960
58
Марий-Эл
@bort707, Есть CMSIS он даёт только упрощённый доступ к регистрам МК. И всё.
Под ядром подразумеваются функции, которые необходимы для инициализации МК.
Настройка тактового генератора, базовые функции ввода вывода и работы с системным таймером.
На данный момент написаны:
Настройка тактового генератора на максимальную частоту для данного МК;
Настройка системного таймера SysTick и функций на его основе. millis(), micros(), delay(), delayMicroseconds().
Так же будут написаны digitalWrite(), digitalRead() и т.д. - но функции подобные этим не будут применяться в библиотеках, в библиотеках будет использоваться только прямой доступ.

Когда я всё выложу, будет понятно что я имею в виду.
 
  • Лойс +1
Реакции: kostyamat и Шал

poty

★★★★★★✩
19 Фев 2020
3,118
917
Почему ж неинтересно? Надо въехать только...
 

neonid

✩✩✩✩✩✩✩
9 Авг 2018
18
6
Анапа
@Эдуард Анисимов, интересно. Как раз захотел переписать библиотеки под f103 для начала. Если есть возможность библиотеки выложить, то буду признателен
 

tiberius

✩✩✩✩✩✩✩
21 Мар 2024
3
0
Считаю хорошей идеей перевод библиотек на STM32 и платформе CUBEIDE. Только всё же думаю нужно стряпать их на MX ибо легче и понятней уровень входа. На себе прочувствовал как тяжело слезть с ардуины, и как легко было с ассемблера залезть на эту ардуину. А стмки в ардуине превращаются в авры, и всех плюшек не видно.
В общем начинание хорошее!
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,327
960
58
Марий-Эл
Только всё же думаю нужно стряпать их на MX ибо легче и понятней
Вы имеете в виду CubeMX ?
Если да, то это не вариант. Там HAL сжирает много памяти.
Есть чипы, где инициализация только периферии, сжирает всю память и на код программиста ничего не остаётся.
 

tiberius

✩✩✩✩✩✩✩
21 Мар 2024
3
0
@Эдуард Анисимов, да, есть такие камни, но в основе по памяти и тактированию они на 3 головы выше тех же авров. В конечном варианте смотря чего мы хотим добиться, популяризации перехода на авр или просто перетащить библиотеки на стм.
Начинающему ,- пофигу на чём мастерить. А не начинающим можно и без CubeMX, но тогда и библиотеки эти им по сути не очень нужны, ибо сами с усами.
Мне как недавно перешедшиму на стм и куб, библиотеки пригодились бы, но мне легче входить в курс дела с МХ с тем самым налом.
Хотя, это моё мнение, со временем я и так подтянусь, но. Всё же было бы легче.

@bort707, программисты с ардуины быстро сливаются, а тем, кто мастерить модельки работа с регистрами усложняет задачу.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,327
960
58
Марий-Эл
@poty, Охренительно. Пишите дальше в ArduinoIDE. Просто нормальных IDE вы не видели.

библиотеки эти им по сути не очень нужны
Библиотеки очень нужны.
Когда делаешь проект, быстро, на классах накидываешь костяк, а потом уже можно и регистрами побаловаться.

Для интереса, это список МК, на которые у меня есть библиотеки. В той или иной степени готовности.
1711126507017.png