Перейти к содержанию
    

STM32, CubeMX, HAL_ vs LL_ . Достоинства и недостатки первого и второго.

Продолжаю разбираться с CubeMX. Нашел кучу диаметрально противоположных отзывов. Как всегда, имеется широкий диапазон адептов от чистого CMSIS, SPL, LL, аж до HAL.
С CMSIS вообщем-то понятно. SPL - неплохое начинание, но в конечном счете - недоделанное и по сути - брошенное на произвол судьбы. Ибо появилась новая грандиозная задумка - CubeMX.

Пока целостного впечатления о CubeMX не получил. Разбираюсь... Попробовал простую задачу скомпилить в HAL_ и LL_. Получил заметное различие объёмов кода, во втором случае - меньше. 
Поэтому возник вопрос, в чем принципиальное отличие высокоуровневого и низкоуровневого в CubeMX? Что и чем лучше, либо хуже? Думаю, многие, освоившие CubeMX, имеют свое мнение на сей счет. Их мнение помогло бы мне (и не только мне) разобраться с этим вопросом.

PS: Убедительная просьба любителей писать "Читай мануалы!" не мусорить в теме, если нет своего внятного ответа. Такой ответ абсолютно бесполезен. Надеюсь на понимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, kv_addr сказал:

Поэтому возник вопрос, в чем принципиальное отличие высокоуровневого и низкоуровневого в CubeMX? Что и чем лучше, либо хуже? Думаю, многие, освоившие CubeMX, имеют свое мнение на сей счет. Их мнение помогло бы мне (и не только мне) разобраться с этим вопросом.

В отношении CubeMX я тоже начинающая, но зато у меня свежий взгляд на вещи :)

 

С моей точки зрения HAL выглядит, как операционная система, предоставляющая программисту обширный API. В ней даже таймер тикает. Вот и CubeMX генерит свой код, активно используя этот API в качестве строительных кубиков. Причем, эти кубики работают достаточно автономно друг от друга, что радует тех, кто прежде использовал ASF на архитектуре AVR. Т.е. разобраться с HAL нетрудно, хотя и выучить все его функции невозможно :). И тут только один метод посоветую - читать код исходников. А кто чужой код патологически не воспринимает :), тому лучше HAL не использовать, т.к. объяснения к нему плохие (недостаточные).

 

Тогда как LL - это просто макросы, хотя и построенные под одну гребенку (общие дефиниции). Этот LL с HAL даже не сравнить! Например, на HAL в один присест можно написать CDC- или HID-девайс для USB. Или АЦП, собирающий данные через DMA. Тогда как чтобы на одном LL такое написать, нужно быть большим гуру :).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 минут назад, Xenia сказал:

Того как LL - это просто макросы, хотя и построенные под одну гребенку (общие дефиниции). Этот LL с HAL даже сравнить! Например, на HAL в один присест можно написать CDC- или HID-девайс для USB. Или АЦП, собирающий данные через DMA. Тогда как чтобы на одном LL такое написать, нужно быть большим гуру :).

 

Спасибо. Ну, вот так вырисовывается, для моих нужд, вполне возможно, LL_ будет более подходящим и достаточным. Я вообще-то - инженер-электронщик, отнюдь нем супер-пупер эмбеддер. Микроконтроллерами занимаюсь лично для себя. AVR, STM8, пробую освоить STM32. Обычно это - вполне простые поделки, не требующие операционной системы (хотя может случится, что возникнет нужда в ОС). Вижу, в моих будущих темах 32-битки интереснее 8-биток. Именно недорогие, простые. Как-то: STM32F030, STM32F100, STM32F103. Те, которые с лихвой заменят AVR или там STM8, будучи заметно эффективнее, но не дороже, а даже дешевле.

В качестве одного из примеров: Для электровелика три года назад поделал кое-что на  AVR. Но хочу расширить функциональность оборудования, заменить на новое. И тут применить STM32 стало более подходящим. Да и для других тем они более интересны. Вот поэтому и пытаюсь освоить STM32. :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, kv_addr said:

 Вижу, в моих будущих темах 32-битки интереснее 8-биток. Именно недорогие, простые. Как-то: STM32F030, STM32F100, STM32F103.

Много материалов найдете начиная с http://mypractic.ru/uroki-stm32

а также начиная с http://dimoon.ru/obuchalka/stm32f1/stm32f1-dokumentatsiya.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 минуты назад, kv_addr сказал:

Микроконтроллерами занимаюсь лично для себя. AVR, STM8, пробую освоить STM32. Обычно это - вполне простые поделки, не требующие операционной системы (хотя может случится, что возникнет нужда в ОС). Вижу, в моих будущих темах 32-битки интереснее 8-биток. Именно недорогие, простые. Как-то: STM32F030, STM32F100, STM32F103. Те, которые с лихвой заменят AVR или там STM8, будучи заметно эффективнее, но не дороже, а даже дешевле.

Я зря вас испугала термином "операционная" система, поскольку никакой там многозадачности нет. Но системный таймер тикает :). А для меня этого уже достаточно, чтобы считать систему живой :) и называть ее операционной. Тем не менее, этот таймер нужен, т.к. для обслуживания периферии бывают нужные какие-то задержки, хотя чаще всего он применяется для организации таймаутов, когда функция слишком долго не отвечает. Т.е. по своей сути он и в самом деле HAL, представляющий фундамент для установки узкоспециализированных "кубиков". Причем, фундамент отнюдь не громоздкий. Более того, даже удобный тем, что берет на себя практически все обработчики прерываний, превращая их в функции пользователя, и зачатую автоматически выполняющий рутинные операции по выходу из них, "успокаивая" ту периферию, которая их вызвала. Так что если STM32 знаешь плохо, то HAL - весьма полезный инструмент, освоение которого со временем позволяет обходиться без него. Т.е. он не берет вас в рабство, как Delphi :).

 

Цитата

В качестве одного из примеров: Для электровелика три года назад поделал кое-что на  AVR. Но хочу расширить функциональность оборудования, заменить на новое. И тут применить STM32 стало более подходящим. Да и для других тем они более интересны. Вот поэтому и пытаюсь освоить STM32. :smile:

У меня примерно та же история. Прежде сидела на  AVR и была всем довольна :), разве что только тактовую частоту хотелось поднять и плавающую арифметику получить. Но после того как Мирочип съел Атмела, надежды на прогресс по части AVR рассеялись. Но главным поводом изменить AVR явилось то, что китайцы стали продавать широкий ассортимент готовых плат на STM32 по предельно низким ценам. А именно по цене, примерно равной розничной цене голой микросхемы контроллера в российском магазине, на фоне того, как AVR-чипы продолжали дорожать. Это решило всё, т.к. я сама изготавливать платы не умею :), тогда как китайцы предлагают их уже готовыми по цене в несколько палочек мороженного :). Вот и пришлось CubeMX изучать, как самый быстрый способ въехать в ARM-архитектуру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Xenia said:

Я зря вас испугала термином "операционная" система, поскольку никакой там многозадачности нет.

Поставьте в кубе галку на FREERTOS и будет операционная система.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, x893 сказал:

Поставьте в кубе галку на FREERTOS и будет операционная система.

Вы не поняли. Мы (я и kv_addr) НЕ хотим операционную систему, но я опрометчиво выразилась "HAL выглядит, как операционная система", из-за чего kv_addr немедленно забраковал HAL под предлогом "мои поделки не требуют операционной системы". И теперь у меня никак не получается забрать те слова назад.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Xenia said:

Вы не поняли. Мы (я и kv_addr) НЕ хотим операционную систему, но я опрометчиво выразилась "HAL выглядит, как операционная система", из-за чего kv_addr немедленно забраковал HAL под предлогом "мои поделки не требуют операционной системы". И теперь у меня никак не получается забрать те слова назад.

Отредактируёте пост или просто забудьте об этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, Xenia said:

для моих нужд, вполне возможно, LL_ будет более подходящим и достаточным.

 

Мое ИМХО (я тоже электронщик) HAL для старта удобней - легко и просто сделать исходные настройки периферии. Хотя потом все же придется "лезть в глубь " :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(Чисто субъективное мнение). LL - замена SPL (которая больше не поддерживается). Кто писал на SPL, перейдёт на LL безболезненно, а HAL может вынести мозги - слишком там по-другому всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, Harbinger said:

(Чисто субъективное мнение). LL - замена SPL (которая больше не поддерживается). Кто писал на SPL, перейдёт на LL безболезненно, а HAL может вынести мозги - слишком там по-другому всё.

В HAL нечему выносить мозг. Код примитивный.

Некоторые блоки конечно не просты в понимании, но они с железом не связаны обычно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, A.Lex сказал:

Мое ИМХО (я тоже электронщик) HAL для старта удобней - легко и просто сделать исходные настройки периферии. Хотя потом все же придется "лезть в глубь " :)

Только что стартовал на STM32WB55 (новый для меня). Без каких либо кубо-калов, чисто по мануалу.

Освоил/понял работу базы: система тактирования + GPIO + мультиплексор пинов + UART + CRC + мелочи. Создал болванку-базу для начала проекта, включающую в себя: возможности отладки (отладочный буферизированный ввод/вывод в UART + отладочная командная консоль + обработку fault-ов + защиты памяти + прочее-прочее что есть у меня во всех проектах), запустил ОС. Т.е. - всё готово (вся необходимая поддержка) для реализации уже прикладного функционала проекта.

Всё вместе заняло 2 дня. Это вместе с созданием файла описания регистров всей необходимой периферии (регистры периферии от RCC до ADC, таблица прерываний, + ещё кучки #define-ов = ~950 строк), вместе с написанием файла описания пинов МК (~550 строк). Конечно не на пустом месте - имею опыт с STM32F4 + кучей других МК. И использовал наработки из других проектов.

 

PS: Так что я уже сразу "в глубине" и на то, чтобы потом туда "лезть" не нужно тратить время. Вообще не понимаю любителей всяких кало-кубов - в чём плюс??? Скорость? какая скорость? Времени тратится на все эти кало-кубы в сумме всё равно больше, чем если сразу открыть мануал. А понимания работы периферии с калокубами никогда не достичь. "Ускорение" получается мнимое.

Неужто жалко потратить 2 дня на вдумчивое чтение мануала, и вместо этого потом неделями перетыкивать галки в "кубе", надеясь - "вдруг заработает"???  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, Xenia said:

. . .  но я опрометчиво выразилась "HAL выглядит, как операционная система", из-за чего . . . 

да норм., "операционная система для генерации базовых настроек контроллера и узлов".

Если ТС работал с комплятором С (и особенно ++) в режиме "текстовый редактор" + компиляция с командной строки в части написания кода и компиляции, а потом перешли на интегрированную среду с хорошо сделанным редактором и броузером - это отличие в написании "стартового" кода без Cube и с ним. В Cube информация из даташита "выложена" в визуальной удобоваримой форме. Есть проверка грубых ошибок.

Код может быть избыточен из-за проверок и требования "унификации".

После начала работы с Cube все равно надо читать-изучать-пользоваться даташитами 500-1500 ст

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я совсем-совсем начинающий, на Си последний раз писал четверть века назад в институте, микроконтроллер программировал последний раз тогда же. И скажу, что мне CubeMX + HAL дал просто мощнейший кикстарт. За каких то 2 недели я написал (пользуясь и примерами, конечно) рабочую программу, которая включала таймеры, работу с АЦП по DMA, и общение по USART. На мой взгляд, CubeMX + HAL - то что надо для новичков, или если нужно сделать что то quick&dirty. С такой связкой начать программировать мк может даже школьник, и это здорово.

 

Но, есть и минусы, правда они относятся в основном к документации. Мне в свое время приходилось много работать с документацией на TI DSP серии 6000 (я не программист, а разработчик микросхем). И вот там описание периферии сделано на голову лучше. Структурные блок схемы, описание автоматов, триггеры, эвенты и т.д. - разжевано так, что после них документация STM (описание на чипы, и тот же HAL) - просто ребусы и слезы. Есть к чему стремиться. По железу - я так и не понял, как таймером дергать внешний пин, кроме как через обработчик прерываний. Если так и задумано, то это серьезный архитектурный промах. А вот к CubeMX + HAL претензий никаких :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 минут назад, k155la3 сказал:

После начала работы с Cube все равно надо читать-изучать-пользоваться даташитами 500-1500 ст

Тут все пугают "тысячами страниц" даташитов. Да не нужно читать их "от корки до корки"! Читать только нужное. Для старта нужна система тактирования - читаем про неё, нужны режимы загрузки - читаем про них, нужно описание GPIO - читаем про него, ну и т.п. А для многих проектов из имеющейся периферии нужно от силы 1-2 блока (кроме базовых). И "тысячи страниц" превращаются в пару десятков  :wink:

18 минут назад, Aleх сказал:

Мне в свое время приходилось много работать с документацией на TI DSP серии 6000 (я не программист, а разработчик микросхем). И вот там описание периферии сделано на голову лучше.

С этим согласен. Тоже разрабатывал по мануалам TI DSP 5000-го и 6000-го семейств (да и Tiva тоже). STM (да и не только им) действительно следовало бы поучиться детальности и логичности описания TI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...