Затмение + GNU ARM + STM32 - HAL или SPL

10

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

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

Следуя инструкциям, я установил eclipse вместе с gcc ARM tools + openocd + make utils и т. Д.

Мой вопрос о плагине «пакетов». Как и у любого новичка, я не совсем понимаю, использовать ли новый STM HAL или старый SPL.

Насколько я понимаю, HAL реализовал абстракцию до уровня, где его можно назвать Arduino-эквивалентом для arm. 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. Еще одна ошибка. Все еще остаются общие вопросы, как мне использовать стандартную периферийную библиотеку с eclipse?
Анкит

Ответы:

6

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

Сам HAL IMO кажется гораздо более многослойным, чем необходимо. Принимая во внимание, что доступ к регистрам непосредственно становится утомительным и едва читаемым. SPL кажется правильным. clive1, гуру на форуме st.com, также предпочитает SPL над HAL. Вот мой вопрос на этом форуме ... может быть полезным.

Нужна помощь с USART на Nucleo STMF411

Sohail
источник
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: фактический, легкий, без использования дополнительного барана, гибкий

Краткое описание для моих оценок:

  • громоздкий - использование большой вспышки, «супер» универсальные функции для работы с периферией
  • Дополнительное использование оперативной памяти - речь идет о HAL, он имеет копию периферийного состояния в структурах оперативной памяти и использует его везде и всегда
  • не гибкий - и снова о HAL, он имеет много функций для разных случаев, но! большинство из них не могут быть использованы для реальных устройств (люди пытаются переинициализировать HAL для получения байтов от usart >_<, все функции для TIM + DMA реализованы для перезаписи регистра TIM и никаких других ...)

Для небольшого восстановления HAL: у него есть одно большое преимущество для новичка - его поддерживает STMCubeMX.

РЕДАКТИРОВАТЬ:

Я забыл про libopencm3 - это альтернативная библиотека. Я не использовал это.

imbearr
источник