Eclipse + GNU ARM + STM32 - HAL або SPL


10

Я почну з розробки ARM (через 2 роки AVR) і підняв плату DISCOVERY STM з мікропроцесором stm32f4 на ній.

Я вирішив піти з eclipse + ARM gcc, оскільки мені не подобається обмеження коду в Keil і у мене немає грошей, щоб отримати платну версію.

Після підручників я встановив eclipse разом із інструментами gcc ARM + openocd + make utils etc.

Моє запитання про плагін "пакети". Як і у всіх початківців, я заплутався в тому, чи варто використовувати новий STM HAL або старіший SPL.

Я розумію, що HAL реалізував абстракцію до такого рівня, коли його можна назвати як еквівалент Ардуїно для зброї. SPL, з іншого боку, забезпечує достатньо абстракції, щоб зробити кодування швидше, але вам все одно потрібно працювати на рівні чіпів.

Маючи таке розуміння, я хотів би дотримуватися SPL, щоб зрозуміти речі краще, ніж використовувати HAL.

Що я хотів би знати, чи чи використання пакетів для STM неявно змушує мене використовувати HAL? Якщо так, чи може хтось вказати мені, як використовувати SPL для мого налаштування?


1
"підручники" трохи розпливчасті, тому я не знаю про "плагін" пакунків ", і я не маю поняття, що таке SPL (периферійна бібліотека STM?) або SPCL. Можливо, я просто не кваліфікований з цього питання, але співпраця зі STM32 вже більше двох років змушує мене замислитися ...
Арсенал

2
SPL - це стандартна периферійна бібліотека , з іншого боку, я також не знаю SPCL.
Бенс Каулікс

2
Сьогодні бажаним і підтримуваним способом STM є використання STM32CubeMX, який генерує код на основі HAL. І мушу визнати, це досить зручно, хоча я не прихильник автоматизованих інструментів, оскільки вони приховують важливі речі ..
Євген Ш.

1
Хоча це має бути в основному сумісним з іншими версіями SPL процесора STM32, я не вірю, що ST має SPL для STM32F7.
Вторник

Вибачте за біт SPCL. Це була помилка. Все ще звикаю до абревіатур. Також лише двічі перевірено, і моя дошка є варіантом stm32f4. Ще одна помилка. І все-таки загальні питання стоять, як я можу використовувати стандартну периферійну бібліотеку при затемненні?
Анкіт

Відповіді:


6

Як я бачу, SPL не має нічого спільного з тим, який IDE ви використовуєте. Ви можете просто включити у свій проект відповідні модулі (наприклад, stmf4xx_dma.c та stmf4xx_dma.h) та використовувати функції, що піддаються (і дуже добре описано) у файлах .c та .h. Насправді я вивчив ядро ​​stmf411 з gcc, openocd та SPL, використовуючи лише командний рядок Windows; немає IDE Пакети в затемненні, ймовірно, змусять вас використовувати HAL (оскільки всередині завантаженої папки "Пакети" для затемнення я бачу лише модулі HAL).

Сам HAL IMO здається набагато більш шаруватим, ніж потрібно. Тоді як доступ до реєстрів безпосередньо стає стомлюючим і важко читається. SPL здається правильно. clive1, гуру на форумі st.com, також надає перевагу SPL над HAL. Ось моє запитання на цьому форумі ... може бути корисним.

Потрібна допомога з USART щодо Nucleo stmf411


1
Я з цим повністю згоден. Здається, HAL перебрав усю концепцію абстракції. Хоча з цим можна було б розвивати програми швидше, ви б не зрозуміли, що саме відбувається, що, на мою думку, є важливим для навчання та бути доказом майбутнього. Як тест, я створив проект uvision і вибрав підтримку спадщини замість програмних пакетів, і, здається, що вони включали файли SPL. Також дякую за посилання!
Анкіт

1

У мене немає досвіду роботи з HAL, але я використовував SPL багато разів для економії часу. На мою переконання, цільовим співтовариством цього вбудованих процесорів є 2 групи: Перша група, яка не зацікавлена ​​в роботі з апаратними шарами. Програмісти-програмісти, звичайні любителі та Arduino, поклонники малини. якщо ви в цій групі, здається, що HAL - це хороший вибір для вас. Секунди, які надходять від електронної та апаратної спільноти, кому віддають перевагу

GPIO_A->PIN &= ~(1 << 15);

до

LED_On(1)

для включення світлодіода і хочу знати, що вони роблять в основному. то якщо у вас є група та маєте достатньо часу для читання довідкового посібника та посібника з програмування вашого MCU, можливо, зареєструйте програмування рівня - це ще один вибір. але якщо ви хочете вибрати лише два варіанти: HAL має кращу перспективу завдяки підтримці ST, але SPL - це простіший шлях до розуміння нового стартера. Можливо, це може допомогти http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/


1
Дякую за посилання, цікаво читайте! Ви маєте рацію, для початківців SPL здається кращим способом для навчання (і це я також обрав). До уваги у вашій відповіді це має бути LED_Off
Ankit

1

Отримайте цей IDE: System Workbench для STM32 - це безкоштовно, засноване на Eclipse і має як arm-gcc, так і openocd в одному пакеті.

А щодо бібліотек: крім SPL та HAL зараз існують LL. У кожного з них є деякі недоліки, і ви повинні вибрати те, що вам потрібно. І як я розумію , всі вони мають експериментальний статус для ST. Нижче мої оцінки до кожної з них:

  • SPL: старий, громіздкий, без додаткового використання барана, гнучкий
  • HAL: фактичне, громіздке, додаткове використання оперативної пам’яті, не є гнучким
  • LL: фактична, ligtweigth, без додаткового використання оперативної пам'яті, гнучка

Короткий опис моїх оцінок:

  • громіздкий - велике використання спалаху, "супер" універсальні функції для роботи з периферією
  • додаткове використання оперативної пам’яті - мова йде про HAL, вона має копію периферійного стану в структурах, які знаходяться в барані, і використовувати її скрізь і щоразу
  • не гнучка - і знову ж таки про HAL, вона має багато функцій для різних випадків, але! більшість з них не використовуються для реальних пристроїв (люди намагаються реанімізувати HAL для отримання байтів за байтом від usart >_<; всі функції для TIM + DMA реалізовані для перезапису регістра TIM і жодних інших ...)

Для невеликої реабілітації HAL: це має одну велику перевагу для новачків - це підтримує STMCubeMX.

Редагувати:

Забуваю про libopencm3 - це альтернативна бібліотека. Я не користувався цим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.