8-900-374-94-44
[email protected]
Slide Image
Меню

Stm hal: HAL stm32 / STM32 / stD

Содержание

Низкоуровневые драйверы периферии (LL Drivers) для STM32

19 декабря 2017

STMicroelectronicsновостьинтегральные микросхемыбеспроводные технологиисредства разработки и материалыSTM32

Компания ST Microelectronics уже много лет известна широкой линейкой микроконтроллеров и отличной поддержкой разработчиков, как с точки зрения отладочных средств, так и со стороны программных продуктов. Можно выделить широко известный графический генератор кода CubeMX, наличие библиотек с драйверами периферии HAL для каждого из семейств микроконтроллеров с множеством примеров использования.

В настоящее время компания ST Microelectronics развивает библиотеку низкоуровневых драйверов Low Layer (LL) для своих микроконтроллеров STM32.

Библиотека LL более требовательная к минимизации потребления памяти, производительности, ближе к периферии по сравнению с HAL и ориентирована на профессиональных разработчиков. В отличие от HAL, LL API недоступны для периферии, где оптимизированный доступ не является ключевой особенностью, или для периферии требующей сложных программных стеков, например, USB.

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

Особенности драйверов LL

  • группа функций для инициализации основных возможностей периферии согласно параметрам в структурах на языке С;
  • группа функций для заполнения структур данных значениями по умолчанию;
  • группа inline функций для прямого и атомарного доступа к регистрам;
  • полная независимость от HAL: LL драйверы могут использоваться как отдельно от HAL, так и совместно;
  • полное покрытие использования возможностей периферии.

В генераторе кода CubeMX была добавлена возможность создания кода с использованием либо HAL, либо LL.

Список низкоуровневых драйверов для периферии доступен в следующих документах:

  • STM32F0
  • STM32F1
  • STM32F2
  • STM32F3
  • STM32F4
  • STM32L0
  • STM32L1
  • STM32L4/L4+

•••

Товары
org/Product» data-pid=»»> org/Product» data-pid=»»>
Наименование
STM32F100CBT6B (ST)

 

STM32 HAL » ControllersTech

Учебники по STM32 на основе библиотеки HAL с использованием CubeIDE

В этом руководстве рассказывается, как отправлять данные из MCU в пользовательский интерфейс в touchGFX.…

В этом руководстве рассказывается, как настроить одноимпульсный режим с одиночным и множественным…

Как подключить двигатель BLDC к STM32 и управлять скоростью с помощью потенциометра, используя…

В этом руководстве рассказывается, как настроить ваш первый проект в touchGFX и управлять…

В этом руководстве рассказывается, как решить проблемы, с которыми мы сталкиваемся при создании проекта…

В этом уроке мы увидим, как каскадировать 3 16-битных счетчика в…

В этом руководстве рассказывается, как запустить наш первый проект на встроенных дисплеях STM32…

В режиме сброса UEV, сгенерированный мастером после переполнения счетчика, составляет…

В этом руководстве рассматривается еще один пример синхронизации таймера, где мы будем генерировать 3-фазную ШИМ…

Режим триггера управляет запуском ведомого счетчика. Главный таймер запускает триггер…

В этом руководстве показано, как STM32 в качестве ведомого устройства Modbus будет реагировать на…

В этом руководстве показано, как STM32 в качестве ведомого устройства Modbus будет реагировать на…

В этом руководстве рассказывается, как STM32 в качестве ведомого устройства будет отправлять ответ…

В этом руководстве рассказывается, как STM32 в качестве ведомого устройства Modbus отправляет…

Это еще одно руководство из серии Modbus, и сегодня мы увидим, как…

Сегодня в серии Modbus мы увидим, как использовать STM32 в качестве…

Это второе руководство из серии Modbus, и сегодня мы увидим, как…

Как использовать STM32 в качестве мастера, запрашивающего данные из регистров хранения…

Как связать модуль преобразователя RS485 в TTL с STM32. Я собираюсь…

В этом руководстве рассказывается, как реализовать FDDCAN в обычном режиме. Я иду…

Сегодня мы продвинем периферийное устройство CAN немного дальше с помощью FDCAN. Это означает…

В этом уроке мы увидим, как перезагрузить определенную часть веб-страницы…

В этом уроке мы увидим, как использовать веб-сервер с AJAX для создания…

Это еще одно руководство по LCD 1602, но на этот раз мы увидим…

В этом руководстве рассказывается, как использовать наш STM32 для создания веб-сервера HTTP, но…

В этом руководстве мы рассмотрим, как использовать STM32 в качестве TCP-сервера и…

Как использовать STM32 в качестве клиента Ethernet UDP с использованием NETCONN с бесплатной RTOS и LWIP.…

В этом руководстве рассказывается, как использовать STM32 Ethernet с бесплатной RTOS с использованием LWIP и…

Модуль GPS Передает данные по UART в формате NMEA. Мы будем…

В обычном режиме BME280 не переходит в спящий режим. Он увековечивает между…

В этом руководстве рассказывается, как подключить датчик DS18B20 к STM32, но с использованием UART.…

HTTP CGI (общий интерфейс шлюза) может использоваться для отправки данных с веб-сервера на…

SSI (Server Side Include) может использоваться для отправки данных с контроллера на…

Это шестое руководство из серии ethernet, и сегодня мы увидим, как…

SDRAM в основном используются, когда мы работаем с большими буферами, например, при использовании…

Сначала нам нужно создать блок TCP с помощью функции tcp_new() Далее мы…

Это четвертое руководство в серии STM32 Ethernet, и сегодня мы увидим…

Мы собираемся использовать следующие шаги для подключения клиента UDP. Первый из…

Создайте новый блок управления UDP с помощью udp_new(). Привязать блок к локальному…

Это руководство является началом серии Ethernet в STM32. Сегодня мы просто…

HAL_UARTEx_ReceiveToIdle_DMA используется для получения данных с использованием DMA до тех пор, пока не произойдет событие IDLE,…

В этом руководстве рассказывается, как использовать инкрементный кодировщик с STM32. Также увидим…

В этом руководстве рассматривается базовый протокол Can в STM32. Здесь мы увидим, как…

В этом руководстве мы будем соединять светодиод WS2812/B с STM32. Я собираюсь…

Как использовать таймер PWM с DMA в STM32. Как отправить буфер на…

сегодня мы увидим, как мы можем управлять позиционированием шагового двигателя с помощью…

В этом руководстве рассказывается, как подключить EEPROM на основе I2C к STM32. Быть…

В этом руководстве рассказывается, как создать WavePlayer с помощью платы STM32 Discovery.

Будет…

Я расскажу о нескольких каналах АЦП STM32, но без использования прямого доступа к памяти, который…

В этом руководстве показано, как мы можем использовать STM32 USB для отправки и…

В этом уроке я расскажу, как реализовать USB CDC (класс коммуникационных устройств) в…

В этом уроке я расскажу, как подключить 1,8-дюймовый TFT-дисплей ST7735 к STM32,…

Модуль беспроводной связи с последовательным портом HC-12 представляет собой многоканальный встроенный модуль беспроводной передачи данных нового поколения.…

В этом руководстве будет рассмотрен другой пример HID, и сегодня мы увидим, как использовать…

Это еще один учебник из серии USB STM32, и сегодня мы увидим…

ESP_Init Инициализирует ESP8266. Его параметрами являются @SSID и @PASSWD точки доступа…

BMP180 также имеют встроенный датчик температуры. Он использует I2C для связи и…

Сегодня мы увидим, как использовать STM32 в качестве USB HOST для взаимодействия с человеком…

Чтобы использовать STM32 USB в качестве хоста для интерфейса любого запоминающего устройства, например, для…

Сторожевые таймеры

IWDG (Independent Watchdog) и WWDG (Window Watchdog) используются для аналогичных целей, но…

Время преобразования АЦП = время выборки + 12,5 циклов. Здесь время выборки — это что-то…

ESP_INIT инициализирует ESP8266, подключив его к предоставленной точке доступа AT+CIPMUX = 0…

мы расскажем, как использовать USB Mass Storage Class (MSC) в STM32. Будет…

В F103 основная память (флэш-память) распределена по 128 страницам. Каждая страница…

Считаем данные с потенциометра и с датчика температуры DHT11, и будем…

мы будем использовать кольцевой буфер для управления веб-сервером Esp8266 с использованием библиотеки STM32 HAL.…

STM32 имеет несколько режимов с низким энергопотреблением для экономии энергии, когда ЦП делает…

мы собираемся использовать параллельное соединение между STM32 и самим ЖК-дисплеем. ЖК…

DS3231 — это, по сути, запоминающее устройство, в которое мы можем записывать данные и считывать…

контроллер получает данные от устройства, он отправляет их на ПК. И…

74HC4051 — мультиплексор 8:1, это означает, что он имеет 8 входных контактов (от Y0 до…

). ЦАП

в STM32 принимает данные в трех целочисленных форматах: 8-битный (младший байт…

Мы используем параллельное соединение для tft, есть 8 контактов DATA и…

Согласно техпаспорту ST7920 Для отправки команды на дисплей…

Мы начнем с настройки CubeMx. Итак, выберите SDIO, а затем…

Всякий раз, когда UART получает данные в кольцевой буфер, заголовок увеличивается на 1. И…

Если файл уже существует на SD-карте, f-open откроет его, а если…

Частота дискретизации = Выходная частота гироскопа MPU6050 / (1 + SMPLRT_DIV). Где выходная скорость гироскопа…

Для инициализации LCD 20×4 нам нужно отправить некоторую последовательность команд на…

Сегодня в этом уроке мы увидим, как использовать входной режим ШИМ для измерения…

Входной захват используется для захвата входного сигнала, подаваемого на микроконтроллер, и измеряет…

hcsr04 излучает ультразвук с частотой 40 кГц, который после отражения от препятствия отражается обратно…

Выше показана часть часов CubeMx. Обратите внимание, что я выбрал АЦП…

В режиме одиночного преобразования АЦП выполняет одно преобразование, после чего останавливается. Вы можете выбрать…

Используйте клавиатуру 4×4 с STM32 Сегодня в этом уроке я собираюсь подключить…

ИК-приемник представляет собой фотодиод и предварительный усилитель, который преобразует ИК-свет в…

Для подключения дисплеев в каскадном режиме контакт вывода данных (Dout)…

Цифровой термометр DS18B20 обеспечивает измерение температуры по шкале Цельсия от 9 до 12 бит и имеет сигнал тревоги…

Теперь, чтобы отобразить любой символ (например, «A»), подумайте о регистрах из…

Мы должны предоставить переменный вход для зуммера, и поэтому я буду…

RTC можно использовать для хронометров, будильников, часов, небольших электронных программ и многих других устройств…

SPI мало чем отличается от I2C. Чтобы включить ведомое устройство, нам нужно…

В этом руководстве рассказывается, как получать данные с помощью UART в STM32. Здесь мы будем…

UART передает данные в режиме блокировки, т.е. ЦП будет блокировать все остальные…

Шаговые двигатели

обычно поставляются с микросхемой ULN2003. Эта микросхема используется для управления…

Цифровой датчик температуры и влажности DHT11 является композитным Датчик содержит калиброванный цифровой сигнал…

Серводвигатели используют обратную связь для определения положения вала, мы можем управлять…

ADXL345 — это комплексная 3-осевая система измерения ускорения с выбираемым диапазоном измерения…

Этот OLED-дисплей использует протокол I2C для связи с микроконтроллером. Так вот вам…

чтобы инициализировать датчик, мы должны перевести линию данных в НИЗКИЙ уровень примерно…

HAL_Delay может обеспечить минимальную задержку в 1 мс, но когда дело доходит до микросекунд, там…

Широтно-импульсная модуляция является одной из важных функций таймера. ШИМ — это техника…

Для изменения адреса нам предоставлены пины A0, A1 и A2. По умолчанию…

Стандартная библиотека периферийных устройств

, CMSIS, HAL и низкоуровневая библиотека множество функций в приятном пакете по разумной цене, что мне нравится. Что мне не очень нравится, так это библиотеки разработки, предоставляемые ST. По этой причине большую часть времени я придерживаюсь написания кода, используя «Стандарт программного интерфейса микроконтроллера Cortex» (CMSIS) и техническое описание, и это хорошо работает, но может быть медленным в разработке. Хотя это по-прежнему мой личный фаворит, я недавно проверил другие варианты, чтобы увидеть, где будут выполняться подготовительные работы для переноса некоторых старых проектов, созданных с использованием «Библиотеки стандартных периферийных устройств», на более новые процессоры, такие как STM32L4.

 

 

Так почему бы не придерживаться стандартной библиотеки периферийных устройств? Просто потому, что ST решила прекратить использование этой библиотеки для будущих процессоров, таких как STM32L4. Вместо этого ST продвигает свой HAL, чтобы предоставить стандартизированный API для устройств в сочетании с инструментом STM32CubeMX для генерации кода для настроек часов, мультиплексирования выводов, настроек периферийных устройств и т. д. сгенерированные файлы проекта, но также скрывает множество сложностей и деталей за уровнями абстракции. Последнее означает, что: а) ваш код становится больше (по существу) и б) ручное редактирование и проверка становятся намного сложнее. Документация тоже, мягко говоря, не самая лучшая, и, похоже, я не единственный, кто замечает эти проблемы.

Именно часть проверки удерживает меня от ее использования. HAL может содержать ошибки (и это было в прошлом). Это означает, что вы тратите гораздо больше времени на проверку правильности всех слоев в критически важных приложениях. Генерация проекта звучит красиво, и, вероятно, это происходит, когда вы используете поддерживаемую IDE. Я предпочитаю использовать компилятор GCC и файлы Makefile, потому что они хорошо интегрируются с тем, как мы делаем нашу продукцию. Это также означает, что мы можем легко запустить процесс сборки на удаленной машине без использования графического интерфейса, опять же, для интеграции с остальными. Хотя я уверен, что вы можете преобразовать некоторые из этих файлов проекта в Makefile, все равно потребуется ручная настройка конкретного проекта каждый раз, когда с помощью CubeMX вносятся изменения. На мой взгляд, CubeMX удобен для тех, кто плохо знаком с микроконтроллерами STM, людей, занимающихся хобби, производителей и т. д., но я не вижу такой работы в профессиональной среде, где обычно требуется полный контроль над тем, что происходит под капотом. и использование ресурсов оптимизировано. Опять же, может быть, я здесь в меньшинстве?

В какой-то момент ST планировал полностью отказаться от библиотеки стандартных периферийных устройств и полностью перейти на HAL. К счастью, они вернулись к этому и создали «Библиотеку низкого уровня». Эта штука намного лучше (хотя определенно не помешала бы доработка). Это довольно близко к тому, как работала стандартная библиотека периферийных устройств, но, на мой взгляд, чище и определенно приводит к меньшему и более оптимизированному коду. Одна из причин заключается в том, что вы можете отключить «полную» версию этой библиотеки, которая избавляется от более сложных функций (подумайте о том, как GPIO настраивается со структурой), и можете просто использовать простые оболочки CMSIS в форме встроенных функций для выполнения этих задач. Это значительно упрощает проверку правильности всего этого.

Короче говоря, низкоуровневая библиотека небольшая, чистая, а также легко создается с помощью Makefile, поскольку вы можете просто создать библиотеку со всеми именованными файлами *_ll_*.c и связать ее в своем проекте, как и стандартная Библиотека периферии раньше работала. Это также означает, что любые пользовательские файлы компоновщика легко переносятся. За выходные я перенес проект разумного размера, в котором раньше использовалась стандартная библиотека периферийных устройств, в новую низкоуровневую библиотеку. Будем надеяться, что улучшения будут продолжаться, и что этот (или прямой способ CMSIS) станет стандартным способом программирования микроконтроллеров STM в более серьезных средах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *