Вопрос к любым инженерам встраиваемых систем, использующим STM32 NUCLEO - PullRequest
1 голос
/ 12 мая 2019

Я недавно купил комплект разработчика STM32 NUCLEO и хотел бы знать, будет ли это использоваться инженером по встроенным системам в промышленности при разработке продукта?

Я использую Kiel Uvision 5, STMCubeMX и STM32 ST-LINK Utility для разработки определенных проектов. Поскольку я привык использовать PIC и использовать регистры, такие как PORTA, OSCCON, TIMER0 и т. Д., Я вижу, что в Kiel Uvision 5 используются готовые функции, такие как HAL_GPIO_TogglePin (.........) и т. Д. Это обычный способ, которым они делают это в промышленности или работать более напрямую с регистрами?

Ответы [ 3 ]

4 голосов
/ 12 мая 2019

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

Если вы спрашиваете о том, что используется в большинстве распространенных случаев, скорее всего, это будут функции HAL (ранее StdPeriph), о которых вы упоминали. Причина в том, что они выполняют свою работу в большинстве обычных случаев. В конце концов, все сводится к тому, какова будет стоимость создания продукта. Если функции HAL «достаточно хороши» для этой цели, они будут использоваться просто потому, что они быстрее развиваются. Чем выше стоимость разработки, тем больше вы захотите сократить ее (или переместить в другое место), и использование абстракций - один из способов сделать это.

Однако, хотя я думаю, что можно с уверенностью предположить, что HAL / Std Periph / любой другой (включая проприетарный) уровень абстракции обычно используется, это не всегда случай по крайней мере по двум причинам, которые я могу себе представить из:

  • Существующие функции могут не подходить для вашей цели. Приведя в качестве примера HAL, он работает довольно хорошо для большинства распространенных случаев, но иногда ваши потребности могут быть настолько специфичными, что вам придется пойти и покопаться «под капотом», часто заканчивая тем, что вы пишете свой собственный вариант функций строить что-то новое на вершине HAL. Лично я могу вспомнить хотя бы несколько примеров, когда функции HAL были не совсем тем, что мне нужно. Это не обязательно означает, что библиотека плохая, просто иногда требования очень специфичны.

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

Теперь к более пристрастной части моего ответа ... Я понимаю, почему вы задаете этот вопрос. Исходя из мира PIC, где тактовые частоты флэш-памяти или процессора были более ценными, имеет смысл использовать регистры непосредственно там. В случае STM32 это уже не так критично. Сказав это, вы иногда будете сталкиваться с мнением о том, что «использование регистров - единственный верный путь», но лично я считаю, что такие дискуссии заканчиваются чисто академическими. Я вижу регистры или любые абстракции, построенные на них, как инструменты, и вы должны использовать правильные инструменты для правильной работы. Два примера НЕ с использованием правильных инструментов:

  • Вы используете только регистры как «единственный правильный путь», либо потому, что вы сами в это верите, либо вам так сказали. Ваши продукты занимают в два раза больше времени (если не больше), ваш код занимает меньше места во флэш-памяти (так что теперь вы используете 46% флэш-памяти 1 МБ вместо 48%). Код, критичный к производительности, отвечает его целям. Код, который ослабил временные ограничения на выполнение, также очень эффективен, но он не сильно влияет на конечного пользователя, если он вообще существует. Ваш код также менее пригоден для повторного использования - каждый раз, когда вы выпускаете новый продукт для нового семейства MCU, вы переписываете одни и те же части кода снова и снова.

  • Вы используете HAL / любую другую подобную абстракцию только потому, что «вы не выбрали такой мощный MCU, чтобы опускаться до уровня регистрации» или потому, что вам сказали, что вы никогда не должны касаться регистров.Вы разрабатываете намного быстрее, и вы можете выпустить два продукта вместо одного, используя регистры.Однако, когда есть ограничения по времени выполнения / скорости передачи, на которые вы должны попасть, вы обнаружите, что выбираете микроконтроллеры более мощные, чем теоретически необходимо.Иногда вы обнаруживаете, что пишете обертки вокруг HAL, потому что они не дают вам именно ту функциональность, которая вам нужна - кажется, что сделать ее сложнее, чем следует.

Так что, в конце концов, еслия хотел сказать, что вы должны использовать то, что подходит для работы в каждом конкретном случае.В случае STM32 у вас в настоящее время есть 3 варианта: HAL (верхний уровень абстракции), HAL LL (низкоуровневая абстракция - часто допускаются простые функции-оболочки вокруг регистра) или непосредственное использование регистров.Какой из них вы выберете, должен соответствовать вашим требованиям.

1 голос
/ 14 мая 2019

Я только что закончил свою степень, и мы активно использовали платформу STM32 с CMSIS и HAL.

Это вопрос предпочтений. Библиотеки HAL предлагают более высокую абстракцию, но имеют некоторые причуды, которые не очень интуитивны. HAL (был /) иногда глючит. Мы столкнулись с ошибками передачи SPI, из-за которых более высокие скорости передачи SPI были непригодны из-за задержки передачи по байтам.

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

(sidenote Я полагаю, что CMSIS была выведена из употребления в пользу HAL, но она все еще пригодна для использования в настоящее время)

1 голос
/ 13 мая 2019

Я использую доски Nucleo все время. Это позволяет мне начать писать программное обеспечение до того, как у меня будет готовое оборудование.

HAL & register way - это скорее выбор программиста, чем «отраслевой стандарт». Я лично использую драйверы HAL, когда программирую более сложные периферийные устройства, такие как USB и Ethernet, чтобы избежать подключения всех стеков с нуля.

...