Библиотеки

Источник: @stm32std

CMSIS - низкоуровневая библиотека, разработаная компанией ARM, для работы с микроконтроллерами на базе Cortex, в том числе и для stm32. Использование CMSIS позволяет получить самый быстрый и компактный код, но требует от разработчика высокого уровня понимания “железа”. Крутые “гуру” пишут на CMSIS.

HAL - высокоуровневая библиотека разработаная компанией ST для программирования микроконтроллеров stm32. По сути, это обёртка над CMSIS, сильно упрощающая разработку, и снижающая уровень вхождения. Однако как говорится, за всё нужно платить, код на HAL довольно таки “тяжёлый” и занимает много памяти.

Все необходимые функции HAL’а генерируются в STM32CubeMX, поэтому не требуется ничего устанавливать и подключать. В общем очень удобно, снижает уровень вхождения до минимума, и сильно облегчает жизнь не только начинающим падаванам, но профессиональным разработчикам. Так же HAL обеспечивает переносимость кода с камня на камень. То есть написав программу для F1 вы практически “безболезненно” сможете использовать её на F3.

Как говорилось выше, HAL это фактически обёртка над CMSIS, а значит изучая HAL вы можете проследить что делают функции и тем самым изучать CMSIS, и постепенно прокачивать “скилы”.

Примеры на HAL

LL - это набор драйверов (функций), которые можно описать как “низкоуровневый HAL”. Эти функции выполняются быстрее чем HAL, но работают не со всей приферией. Код опять же генерируется в STM32CubeMX (там есть выбор, HAL или LL).

SPL - эта библиотка нечто среднее между CMSIS и HAL. Можно сказать, что HAL пришёл на смену SPL. Многие разработчики продолжают её использовать, но она постепенно уходит в прошлое. Например разрабатывать программы для современных камней (F7, H7, L4) с помощью SPL вы уже не сможете. Так что браться за её изучение не стоит.

Если есть какой-то старый код на SPL, то его вроде как можно перенести на LL, и даже вроде как есть специальные конверторы, но я за это ничего не знаю - не интересно.