Низкоуровневая библиотека

У стандартной библиотеки периферии есть два недостатка (личное мнение): в ходе разработки она слишком разрослась и не предоставляет унифицированного интерфейса (поэтому был придумал HAL); и не все операции являются атомарными (хотя в случае инициализации вряд ли это можно назвать проблемой).

По сути низкоуровневая библиотека (англ. low layer) — это реинкарнация стандартной (разработка которой прекращена). Однако она не такая гибкая, как ее предшественник: предусмотрены функции только для основных возможностей периферии1, если вам нужно работать с USB, то сделать это через LL не получится. Кроме функций, дублирующих возможности StdPeriph (объявление, заполнение и передача в функцию инициализации структуры), низкоуровневая библиотека предоставляет inline-функции прямого доступа (атомарного) к регистрам.

Такой подход (атомарных операций) лучше: во-первых, их можно вызывать без опасения, что они будут прерваны исключительной ситуацией; во-вторых, не нужно тратить дополнительную память на хранение структур; и в-третьих, снижаются накладные расходы, ведь вызывать функцию (а значит, и сохранять стек) не приходится — inline-функция вставляется в место вызова, как макрос. Для того чтобы подключить библиотеку, нужно объявить макрос USE_FULL_LL_DRIVER (в настройках проекта).

Ниже приведена типичная структура проекта.

low layer

Низкоуровневая библиотека, как и стандартная, для своей работы использует CMSIS, имеет схожий принцип именования файлов (stm32yyxx_ll_ppp.h, stm32yyxx_ll_ppp.c) и разбита на три подуровня.

Низкоуровневая библиотека, как и стандартная, для своей работы использует CMSIS, имеет схожий принцип именования файлов (stm32yyxx_ll_ppp.h, stm32yyxx_ll_ppp.c) и разбита на три подуровня.

Функциональность включения/отключения периферийных блоков вынесена из _rcc в stm32f1xx_ll_bus.h. В файле stm32f1xx_ll_system.h расположены некоторые функции для работы с falsh-памятью и отладчиком. В файле stm32f1xx_ll_utils.h присутствуют функции для настройки PLL, задержки и считывания идентификатор МК (уникальный номер).

Перепишем всё тот же пример инициализации ножки микроконтроллера на выход.

Для перевода старого проекта на низкоуровневую библиотеку ST разработала утилиту SPL2LL-Converter. Детальное описание библиотеки можно найти в документе UM1850.


Назад | Оглавление | Дальше


1 Модули FLASH, NVIC (есть в CMSIS), DFSDM, CRYP, HASH, SDMMC(SDIO) низкоуровневой библиотекой не поддерживаются.