STM32F4 и HAL


23

Поэтому я немного поэкспериментировал с STM32F407 (я новичок в ARM) и решил написать простое приложение с использованием библиотек HAL, поскольку кажется, что ST прекратил выпуск стандартных библиотек периферийных устройств. Итак, мой вопрос, какой смысл в HAL? Разве StdPeriph не делал свою работу? Почему они прекратили бы это для HAL? Мне кажется, что HAL - полный беспорядок.

Документация ужасна, по крайней мере, для StdPeriph есть полная справка, организованная достаточно хорошо, чтобы легко найти то, что вы хотите ( http://stm32.kosyak.info/doc/ ). Для HAL существует дурацкий PDF ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ), который имеет, казалось бы, случайную структуру. Читая любой раздел, например, относительно периферийных устройств, я не могу понять требования для его настройки и правильной настройки. Это больше похоже на личные заметки от кого-то, кто не хочет забывать вещи, чем ссылки.

Я знаю, что могу использовать CubeMX для инициализации GPIO и настройки периферийных устройств, но моя цель - сделать это самому, чтобы я лучше понимал их работу, а не какое-то программное обеспечение, делающее все это для меня. Я делаю что-то неправильно? Меня смущает новичок в ARM? Или доступная документация ЭТО плохо?


Будет ли что-то вроде ChibiOS вам лучше подойдет? Они имеют ОСРВ, но также и очень хороший HAL, который вы можете использовать без ОСРВ.
IgorEE

ST точно не прекратил выпуск Стандартных периферийных библиотек, но они не будут выпускать новые версии для новых семейств. Они заявили (где-то на их форуме, но я не могу найти его), что они будут продолжать поддерживать SPL для семей, для которых он был выпущен (включая STM32F4). Поскольку вы новичок в ARM, вероятно, лучше пойти с HAL. У меня есть очень много модулей, уже написанных с использованием SPL, поэтому переход будет болезненным, и я откладывал это. Это плохо, так как, как только я решу использовать новое семейство, будет еще больше кода для переноса на HAL
Tut

Эта электронная книга: leanpub.com/mastering-stm32 - хорошее введение для новичка (но и для профессионалов) в мир STM32.
Лоренцо Мелато

Ответы:


13

Создать свои собственные библиотеки довольно просто. Их документация по спецификации реестра довольно хорошая, большинство, если не все периферийные устройства просты в настройке. Я нахожу гораздо более болезненным использование их библиотек. но, возможно, это только я. Это верно для st, nxp, ti, atmel, чтобы назвать несколько (не так много для intel и microchip).

Почему они меняют библиотеки, может быть по нескольким причинам, какой-то новый босс вступил во владение, какое-то подразделение закрыто, другое вступило во владение. Маркетинг хотел новый образ для продукта. Как упоминал ElectronS, это может быть попыткой отвлечься от аппаратного обеспечения, чтобы привлечь пользователей, не желающих или не умеющих делать голый металл. Я хотел бы пойти дальше и сказать, что они, вероятно, пытаются конкурировать с феноменом Arduino. Который мбед и все остальные всегда пытались сделать и потерпели неудачу (даже до Arduino).

В любом случае, чем дальше от аппаратного обеспечения, тем более раздутым и медленным, тем больше вы должны тратить на единицу для rom, ram и mhz. Просто чтобы ты мог потратить столько же времени на программирование? Просто делать это по-другому?

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

В конце дня, попробуйте различные варианты, попробуйте конкурирующие продукты, чтобы увидеть, как их инструменты сравниваются. Многое из того, что вы можете сделать бесплатно, просто чтобы увидеть, имеет ли это смысл, и вы можете компилировать вещи. Может быть, даже использовать симулятор набора инструкций. Найдите тот, который подходит вам.

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

Чтобы продать подобный чип-продукт, они должны предоставить среду разработки, будь то все их или бесплатные вещи, которые они склеили. И они, как правило, собирают какую-то библиотеку. Это должно выглядеть просто достаточно хорошо, и приведенный пример работает достаточно хорошо, чтобы заставить ваше руководство или команду аппаратного обеспечения спроектировать свой продукт, тогда, когда ваш программный продукт переброшен через стену на программное обеспечение, это когда боль делает или не прибывает. Если это почти работает, но не совсем, это большая победа для производителя чипов, так как теперь вы будете платить за техническую поддержку для этого последнего кусочка. Поэтому в их интересах быть почти там, но не совсем.

Производители чипов должны выглядеть достаточно хорошо, чтобы выиграть дизайн. Они должны постоянно улучшать («менять») продукт, чтобы привлекать новых и старых клиентов. Таким образом, им придется делать оверны, как далеко друг от друга и сколько предыдущих библиотек продолжают поддерживать, варьируется. Так что практически любая библиотека, к которой вы привыкли, со временем исчезнет. Так что учитесь приспосабливаться (или не используйте их вещи и переходите к собственным, которые вы можете поддерживать бесконечно). Конечно, в идеале вам нужно разрабатывать приложение только один раз для каждого продукта, делать идеальную прошивку (удачи, если вы используете сторонние библиотеки), и вам не нужно возвращаться и искать компьютер, который загрузит их набор инструментов, если вы сможете найти скопируйте его и вспомните, как использовать эту старую библиотеку. Помните, что вы должны не только сохранять исходный код, но и сохранять все его инструменты и документы.

Их библиотеки поддерживаются, как правило, только в одной цепочке инструментов, в одной, может быть, в двух IDE, а иногда только в Windows, и в определенных версиях. Опять же, у вас нет ни одного из этих ограничений, определенно не для ARM, если вы делаете свое дело. Вы всегда можете прочитать любую / все их библиотеки, чтобы увидеть, как они работают. Но это часто очень страшно, они не используют своих разработчиков команды A для библиотек, я выделил несколько строк кода, чтобы спросить кандидатов на собеседованиях, что не так с этим кодом.

чтобы сэкономить время и усилия как на стороне кремния, так и на стороне программного обеспечения, они очень часто перерабатывают один и тот же ip, поэтому, как только вы видите, как периферийное устройство работает на одном из их чипов, оно часто работает так же, как и на многих других их чипах. Да, системы часов могут быть хитрыми с их библиотеками или без них. Высокие шансы на обломок чипа, именно здесь произошел брикет моего чипа / платы. Помогает понять, как работают их микросхемы, например, AVR, большинство, если не все, можно перепрограммировать во время сброса микросхемы, поэтому любой плохой код, который испортил контакты, необходимые для перепрограммирования, или повредил логику, необходимую для перепрограммирования, не делает независимо от того, вы можете перепрограммировать эти чипы. Некоторые из этих поставщиков (st is one) имеют встроенный загрузчик, который можно выбрать с помощью ремешка (например, BOOT0 в st-мире),

Один размер подходит всем и никому не подходит. Особенно актуально для программного обеспечения. Поэтому любая попытка абстрагировать аппаратное обеспечение просто делает его медленным и раздутым. Также возможно получить чип большего размера и запустить на нем linux, если вы действительно этого хотите. Большая часть этого является результатом того, что разработчики не хотят запачкать руки, поэтому мы в основном просили об этом, и они пытаются это предоставить.

Опять же, не привязывайтесь к st или любому другому поставщику (если это не слишком поздно, и руководство и / или команда аппаратного обеспечения не обратили на вас внимания, обратите внимание, что продукты stm32 хороши и просты в использовании). Магазин вокруг. TI кладет много яиц в корзину cortex-m4. Вы можете использовать mbed для ряда продуктов, а также для решений, поддерживаемых поставщиком.

Одна вещь, на которую вы всегда можете положиться, это то, что они будут время от времени менять библиотеки и в конце концов перестанут поддерживать ту, к которой вы привыкли.


Отличный аргумент в разработке ваших собственных библиотек, почти убежден, и я хотел бы попробовать это, что, по вашему мнению, мне понадобится, кроме справочного руководства по stm32fxx? я должен также прочитать руководство ядра руки? я буду использовать CMSIS? как я получу доступ к регистрам и памяти? Не могли бы вы подробнее рассказать или привести пример того, как начать
ElectronS

еще несколько вещей для размышления. каждая строка кода добавляет риск. объяснив своему боссу, что вы планируете использовать от десятков до сотен тысяч строк чужого кода, не просматривая каждый его фрагмент. Слои кода, особенно при абстрагировании, приводят к увеличению размера двоичных файлов и снижению производительности. Итак, еще раз объясните своему боссу, что 10 миллионов единиц продукта будут стоить дополнительно 35 центов за или 3,5 миллиона долларов, потому что вы решили использовать библиотеку, потому что вы ленивы.
old_timer

Ваш босс может нанять целую армию людей, чтобы заменить вас за такие деньги, пересмотреть каждую строку кода, чтобы они не набрали 10000 единиц и обнаружили, что им нужно уничтожить их из-за программной ошибки, вызванной использованием рискованного программного обеспечения. и использовать меньшую часть, которая стоит дешевле при более низкой тактовой частоте, которая потребляет меньше энергии и дольше работает от одной зарядки аккумулятора. иногда это стоит усилий. и конечно, иногда нет.
old_timer

спасибо за больше очков, которые вы заявили, но не могли бы вы ответить на мой вопрос, как лучше начать? использование файлов CMSIS и HAL .h для имен регистров и ячеек памяти
ElectronS

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

14

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

Итак, ответить на ваш вопрос, почему ST выбрал HAL, просто:

  1. Они хотят создать уровень аппаратной абстракции, что на простом английском означает, что они хотят, чтобы разработка программного обеспечения и код не зависели от микроконтроллера, поэтому, если вы сегодня напишите код для stm32f4, и вам понадобится через пару лет перейти на stm32f7, он будет легко, и код будет очень модульным.

  2. Это также позволяет большему количеству разработчиков, таких как программист, работать с микроконтроллером, не понимая и не углубляясь в подробности того, как оборудование решает задачу. Такие компании, как ST и TI (начинающие этот путь сейчас) пытаются сделать встраиваемую разработку похожей на разработку кода для ПК, где вы используете высокоуровневые драйверы для разработки кода FAST. Неуклюжесть и отсутствие оптимизации в их драйверах и библиотеках компенсируется высокой производительностью устройств ARM.

  3. Я думаю, что STM32cubeMX - отличный инструмент, если вы используете библиотеки HAL, потому что самая трудоемкая работа - это инициализация периферийных устройств, и теперь вы можете сделать это за очень короткое время, с визуальным интерфейсом, который можно легко изменить, не затрагивая пользовательский код (если вы пишете свой код в соответствующем месте) Вы можете использовать Stm32cubeMx, а затем просмотреть код и попытаться понять, как и почему они используют каждую функцию, таким образом, вы пытаетесь выполнить упражнение и располагаете рядом с руководством по решению для исправления, которое отличное ИМО.

  4. Ядро ARM довольно сложное, поэтому старые методы, которые мы использовали на 8-битном микроконтроллере, такие как непосредственная обработка регистров (написание C выполняется в ассемблерном режиме), неосуществимы, занимают много времени и затрудняют поддержку кода из-за сложной архитектуры (проверьте настройка часов например)


6
Это все очень понятно, однако все это относится и к StdPeriph, не так ли? Я имею в виду, что это уже библиотека аппаратных абстракций, так какой смысл создавать новую, а не улучшать старую? Мне действительно любопытно, я очень плохо знаком с ARM, я использую PIC много лет.
Джон

Тем более для библиотек, совместимых с CMSIS
Скотт Сейдман

1
@john, насколько я понимаю, HAL более абстрактен и менее зависим от аппаратного обеспечения, чем стандартные библиотеки.
ElectronS

12

Я знаю, что это будет долго и самоуверенно, но, поскольку мы только что (успешно) выпустили наш новый продукт с использованием HAL, я думаю, что это стоит рассмотреть. Кроме того, я не работаю на ST, я ненавидел каждый бит HAL, почти перезапустил проект с StdPeriph, я почувствовал боль - но теперь я понимаю, почему.

Сначала немного предыстории. Мы разрабатываем системы телеметрии со сверхнизким энергопотреблением, и наш продукт работает на STM32L1. Когда мы начали работать над микропрограммой, у нас были обычные варианты для («голых») устройств ST: делать все вручную, использовать библиотеки StdPeriph или использовать HAL. Парни из ST убедили нас пойти с HAL - так мы и сделали. Это было больно, нам приходилось обходить ошибки в программном обеспечении (часть I2C в течение некоторого времени сводила нас с ума), и мне все еще не нравилась общая архитектура. Но это работает.

Когда я перешел с настольного компьютера на встроенный, чуть больше года назад, я был ошеломлен чем-то странным, что я не мог назвать или даже понять. Со временем я был в состоянии понять , что было - или , вернее, то , что это - происходишь: вложенный мир находится в переходном периоде. Силикон становится дешевле каждый день, а микроконтроллеры более мощные и универсальные. Все больше и больше устройств, независимо от их размера, потребностей в питании, полагаются на универсальные микроконтроллеры. Все больше и больше компаний присоединяются к игре, привлекая множество новых разработчиков с различным опытом. «Средняя» культура отходит от традиционного «парня из EE с навыками программирования» до «парня из SW с неопределенными знаниями в области аппаратного обеспечения».

Хорошо это или плохо, не имеет значения. Это просто случилось. На самом деле, это также случалось с миром программного обеспечения, не раз. Веб-бум в 2000 году привлек новичков в PHP / MySQL - скажи им, что в процессоре есть регистры, они ответят: «Я использую Linux, поэтому в моей ОС нет реестра». Ранее многопользовательские ОС, работающие в защищенном режиме, позволяли ленивым разработчикам никогда не устанавливать ISR за всю свою карьеру и все было в порядке . Еще раньше клавиатурные и экранные перфораторы и производители принтеров сходили с ума.

И да, текущие тенденции меня лично огорчают, поскольку я вижу, как невежественные разработчики в восторге от последних блестящих технологий, будучи совершенно неспособными связать их с историей. Когда в 2015 году я вижу себя моложе меня, пишущего код на Javascript для WebGL, я хочу крикнуть: «Ничего нового! Я сделал то же самое с C ++ и 3Dfx SDK в 1995 году!». История не рассказывает о том, что его игра работает на моем мобильном телефоне, в то время как моему нужен компьютер для игры (и установщик, а я не могу загружать обновления через Интернет). Правда в том, что он мог разработать игру за один месяц, где я делал то же самое за шесть или двенадцать.

Очевидно, что ни ST, ни TI, ни Intel, ни те, кто производит чипы, не хотят пропускать ход. И они правы. HAL является ответом ST, и на самом деле он достаточно здравый, не только со стороны бизнеса или маркетинга, но и с инженерной стороны. Причина, почему это звук, заключается в названии:

Уровень аппаратной абстракции

Во всяком случае, это то, что вы должны помнить. HAL - это попытка отойти от оборудования. Это хорошая техника, потому что она позволяет нам отделить функциональность от деталей. Расслоение - это то, что позволяет разрабатывать сложные программы - одна абстракция поверх другой, вплоть до аппаратного обеспечения. На самом деле абстракция - это самый мощный инструмент для управления сложностью . Я очень сомневаюсь, что кто-нибудь на этой планете сможет программировать веб-браузер в сборке для конкретного процессора.

Культурный сдвиг действительно трудно усвоить, но, как мне кажется, не нужно читать « Искусство компьютерного программирования» Кнута для разработки веб-приложений, мир EE должен признать, что есть новички, которые могут (и будут!) Разрабатывать встроенный код. не прочитав Fucking Holy Reference Manual.

Хорошая новость заключается в том, что новые игроки не означают меньше работы для старых игроков - наоборот, ИМХО. Кому они будут звонить, когда что-то не работает? Если у вас есть RTFM (в отличие от них), и если вы знаете, что делает каждый бит этого непонятного регистра конфигурации, у вас есть преимущество.

Между вашими чтениями и экспериментами просто идите с HAL. Новый MCU? Нет проблем. Новая линия MCU? Также нет проблем (я кодировал тест на STM32F4 Nucleo всего за один день с CubeMX, а затем просто перенес его на наше устройство ... оно показалось мне правильным ). Издеваться над юнит-тестами? Нет проблем. Список можно продолжать и продолжать, потому что абстракция хороша.

Конечно, сам HAL не на 100% в порядке. Это ужасная документация (но у вас есть RT F HRM, не так ли?), Есть ошибки, ST только что выложила нам бета-версию (кажется, довольно стандартной в наши дни), и их публичная поддержка - шутка. Но не выпускать HAL было бы еще хуже.


Я вижу, откуда ты. Как я понимаю, вещи (к сожалению) идут по пути Arduino, пытаясь скрыть как можно больше реальности от программиста, чтобы заманить больше программистов высокого уровня в аппаратное программирование, и в этом причина таких библиотек, как HAL. Однако, учитывая, насколько это плохо документировано, а также полный беспорядок, я не думаю, что им это удастся в ближайшее время.
Джон

@John: HAL не скрывает никакой «реальности». Все есть для вас, чтобы настроить. Все части являются необязательными - например, вы можете использовать только макросы для доступа к регистрам, или только определенный драйвер (например, I2C) или все, включая ISR и конфигурацию часов. Твой выбор. Тем не менее, я согласен, что документация много отстой. (Я сказал ST, и они обещали, что работают над этим BTW)

Мы повторяем то же самое с новыми инструментами. Потому что новые инструменты обещают сделать работу проще и быстрее, а значит и экономически эффективны. Но мы все еще делаем то же самое, потому что люди все те же, независимо от того, был ли это 2095 или 1995 год. Выбор остается за нами, если мы будем следовать новым инструментам или останемся с нашими уже знакомыми инструментами.
Джони
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.