Site Loader

Stm32 SPL или Регистры? — Хабр Q&A

SPL
плюсы:
1. Приемлемый уровень абстракции между разными камнями и семействами, есть мануалы как переводить софт с одного на другое семейство стм32 и в них описан ТОЛЬКО SPL
2. Он понятнее чем запись в регистры, особенно если нужно наработки использовать потом через пару лет или другим человеком.
3. Сама фирма производитель тестировала чипы именно на SPL и значит порядок работы с периферией что заложен в SPL даст существенно меньше глюков чем любой другой.
4. В SPL интуитивно понятный и можно писать «на деревню дедушке», т.е. DAC_deinit() например зная что ADC_DeInit() существует значит и другое есть
5. В SPL всё таки много наработок — в множестве функций есть очень тонкие моменты и ньюансы которые уже сделаны и при работе с регистрами на них точно напорешся и потратишь не одну неделю.

МИНУСЫ:
1. SPL медленный, особенно ножкодрыганье — но он для этого не предназначен вообще то и ждать от него скоростей в пару тактов глупо. Да и для 99% задач SPL достаточно быстр. Как решение проблемы использовать побитовый доступ для ножкодрыгания, или один раз через SPL настроил что надо, сохранил все значения регистров в временные переменные и одним memmove просто скопировал в блок регистров сразу всё — максимально быстро особенно для ДМА которой надо дофига всего сделать.

2. SPL толстый — жрёт много флеша, решается сия проблемма превращением части функций в инлайн вариант, тогда отпадают все проверки для всех блоков переферии и код уменьшается в 3-5 раз но только если он использован разово. Можно напороться на особенности инлайн функций и прочие недостатки. Но для 99% задач размера флеша хватает и садить SPL на диету не нужно или просто глупо.
3. код SPL громоздкий … ну вы батенька WinAPI не видели и другие высокоуровневые языки.
4. SPL написан с учотом что кодить на нём будет профессионал Си и такие ляпы как забыть очистить структуру от мусора стека подразумевается что профессионал не сделает, но если новичок допускает их то сам дурак и можно долго на форумах вонять что SPL гавно — руки от этого не выпрямятся.

My Embedded: STM32F407(STM32F4-DISCOVERY) — Нестандартный подход

Часть 1 — Теория

В предыдущей статье я указывал, что к системе подключается стандартная библиотека. На самом деле, подключается CMSIS — система обобщенного структурного представления МК, а также SPL — стандартная библиотека периферии. Рассмотрим каждую из них:

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

Эта библиотека если верить описанию создавалась для унификации интерфейсов пр работе с любым МК семейства Cortex. Однако, на деле выходит, что это справедливо только для одного производителя, т.е. перейдя на МК другой фирмы вы вынуждены изучать его периферию почти с нуля.
Хотя те файлы которые касаются процессорного ядра МК у всех производителей идентичны (хотя бы потому, что модель процессорного ядра у них одна — предоставленная в виде ip-блоков компанией ARM).
Поэтому работа с такими частями ядра как регистры, инструкции, прерывания и сопроцессорные блоки стандартна для всех.
Что касается периферии то у STM32 и STM8 (внезапно) она почти похожа, также частично это справедливо и для других МК выпущенных компанией ST. В практической части, я покажу насколько просто использовать CMSIS. Однако трудности в его использовании связаны с нежеланием людей читать документацию и разбираться в устройстве МК.

Именно поэтому, далее я опишу следующий компонент стандартной библиотеки.

SPL
Standard Peripheral Library — стандартная библиотека периферии. Как следует из названия, назначение этой библиотеки — создание абстракции для периферии МК. Библиотека состоит из заголовочных файлов где объявлены человеко-понятные константы для конфигурирования и работы с периферией МК, а также файлы исходного кода собираемые собственно в саму библиотеку для операций с периферией.

SPL является абстракцией над CMSIS представляя пользователю общий интерфейс для всех МК не только одного производителя, но и вообще всех МК с процессорным ядром Cortex-Mxx.
Считается, что она более удобна новичкам, т.к. позволяет не думать как работает периферия, однако качество кода, универсальность подхода и скованность интерфейсов накладывают на разработчика определенные ограничения.
Также функционал библиотеки не всегда позволяет точно реализовать настройку некоторых компонентов таких как USART (универсальный синхронный-асинхронный последовательный порт) в определённых условиях. В практической части, я также опишу работу с этой частью библиотеки.

Базовый проект

💣библиотека spl ✔️



Главная

Loading…


ТЭГИ


приколы видео орел и решка черногория русские молодые политика спорт музыка события факты звёзды Дота 2 женщины альтернатива КВН драки война мультики актёры кино онлайн масяня приколы наруто видеоклипы видеобитва машины видеореклама вконтакте однокласники видеоролик дня видеоролики 2018 видеоролики без смс казино АТО ДНР ополчение смешное видео youtube приколы дом2 драки стоп хам драки я приколы видео дом2 серии дорогой ты где был русские детективные сериалы бэк ту скул пранки над друзьями новые видеоклипы, Поздравления

РЕКЛАМА



ПАРТНЁРЫ


Сообщество


библиотека spl .

Программирование МК STM32. УРОК 3. Библиотека SPL. Подключаем кнопку
Программирование МК STM32. УРОК 3. Библиотека SPL. Подключаем кнопку
Нажми для просмотра
Программир ование на СИ в среде Keil μVision. Пишем код под микроконтр оллер STM32F407VG на плате …
 
 
 
Тэги:
 
Структуры данных в PHP. Библиотека PHP SPL [GeekBrains]
Структуры данных в PHP. Библиотека PHP SPL [GeekBrains]
Нажми для просмотра
Начни карьеру с бесплатног о курса «Основы программир ования» Структуры данных в PHP.
 
 
 
Тэги:
 
STVD (COSMIC+SPL) Установка и настройка для STM8S
STVD (COSMIC+SPL) Установка и настройка для STM8S
Нажми для просмотра
Установка и настройка среды разработки ST Visual develop IDE для программир ования микроконтр оллеров STM8S на …
 
 
 
Тэги:
 
SPL Central Library Tour
SPL Central Library Tour
Нажми для просмотра
Chief librarian Marcellus Turner and Library staff members show you the highlights of the Central Library in downtown Seattle.
 
 
 
Тэги:
 
Урок 75: Пример работы с микрофоном на stm32f4-discovery на SPL
Урок 75: Пример работы с микрофоном на stm32f4-discovery на SPL
Нажми для просмотра
Ссылка на пример:
 
 
 
Тэги:
 
STM8S Discovery IAR and Standard peripheral library настройка и загрузка проекта
STM8S Discovery IAR and Standard peripheral library настройка и загрузка проекта
Нажми для просмотра
IAR for STM8 and Standard peripheral library настройка и загрузка проекта ссылка на статью …
 
 
 
Тэги:
 
Spl library
Spl library
Нажми для просмотра
STM32F библиотека StdPeriph Lib и настройка среды IAR для создания, заливки проекта ссылка на статью …
 
 
 
Тэги:
 
STM32 Discovery IAR and StdPeriph Lib настройка и загрузка проекта
STM32 Discovery IAR and StdPeriph Lib настройка и загрузка проекта
Нажми для просмотра
Программир ование на СИ в среде Keil μVision. Пишем код под микроконтр оллер STM32F407VG на плате …
 
 
 
Тэги:
 
Программирование МК STM32. УРОК 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка
Программирование МК STM32. УРОК 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка
Нажми для просмотра
In this video, I used STM32 standard peripheral library. Program one STM32 board for SPI master and other is SPI slave. SPI …
 
 
 
Тэги:
 
SPI communication between two STM32 microcontrollers / SPL library SPI master slave
SPI communication between two STM32 microcontrollers / SPL library SPI master slave
Нажми для просмотра
В данном видеоуроке мы с вами рассмотрим с вами очень классную PHP библиотеку , которая помогает на быстро…
 
 
 
Тэги:
 
PHP библиотека для работы с Яндекс-диском
PHP библиотека для работы с Яндекс-диском
Нажми для просмотра
Сегодня мы изучим, как работают внешние прерывания в микроконтр оллерах STM32. В данном уроке мы научимся обра…
 
 
 
Тэги:
 
Программирование МК STM32. Урок 74. EXTI или внешние прерывания
Программирование МК STM32. Урок 74. EXTI или внешние прерывания
Нажми для просмотра
Overview of the datastructures included into the Standard PHP Library (SPL). We take a closer look at classic datastructures like …
 
 
 
Тэги:
 
PHP Standard Library Part 1: Datastructures
PHP Standard Library Part 1: Datastructures
Нажми для просмотра
В данном занятии мы продолжим знакомство со сторожевым и таймерами (Watchdog timer), так как у микроконтр оллера…
 
 
 
Тэги:
 
Программирование МК STM32. Урок 140. Window watchdog (WWDG). Часть 1
Программирование МК STM32. Урок 140. Window watchdog (WWDG). Часть 1
Нажми для просмотра
Библиотека STDPeriph очень облегчает работу с STM. В этом видео напишем простой скетч для мигания светодиодо м….
 
 
 
Тэги:
 
STM и библиотека STDPeriph
STM и библиотека STDPeriph
Нажми для просмотра
The Standard PHP Library (SPL) has been an option in PHP since version and always available since , yet few …
 
 
 
Тэги:
 
Mark Baker — SPL: The undiscovered library — Exploring datastructures
Mark Baker - SPL: The undiscovered library - Exploring datastructures
Нажми для просмотра
DIY 커뮤니티 iMventor! STM32 Standard Peripheral Library 사용하는방법 알아봅시다.
 
 
 
Тэги:
 
iMventor : STM32F4 SPL(Standard Peripheral Library) 사용하기
iMventor : STM32F4 SPL(Standard Peripheral Library) 사용하기
Нажми для просмотра
В данном занятии мы продолжим знакомство со сторожевым и таймерами (Watchdog timer), так как у микроконтр оллера…
 
 
 
Тэги:
 
Программирование МК STM32. Урок 140. Window watchdog (WWDG). Часть 2
Программирование МК STM32. Урок 140. Window watchdog (WWDG). Часть 2
Нажми для просмотра
В данном занятии мы познакомим ся со сторожевым таймером (Watchdog timer), а конкретно с IWDG (Independent …
 
 
 
Тэги:
 
Competitive exams library science spl
Competitive exams library science spl
Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1
Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1

Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1

Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1

Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1

Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1

Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 
Программирование МК STM32. Урок 138. Independent watchdog (IWDG). Часть 1

Нажми для просмотра
Описание отсутсвует
 
 
 
Тэги:
 

Шаблоны проектов IAR для STM8S/STM8L SPL / STM8 / Сообщество EasyElectronics.ru


Честно говоря запарился я на каждый проект перетаскивать исходники, настраивать пути, прописывать хедеры и прочее прочее. И наконец-то созрел сделать себе нормальные шаблоны. Лучше ведь поздно чем никогда, верно?

И для того чтобы не забыть, что и где я правил в оригинальной библиотеке, да и чтобы где-то забэкапить результаты своих трудов решил написать эту заметку. Ну а если кому-то это поможет сэкономить время — буду только рад =)

Для создания шаблонов использовался IAR 1.42.3, и библиотеки STM8S SPL v2.2.0, STM8L51x SPL v1.6.1.

Установка
Для установки нужно всего лишь распаковать архивы в
c:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\stm8\config\template\project\
Собственно в папках содержатся структуры будущих проектов, а в файлах с расширением .projtempl находится описание шаблона и полный список его файлов.
STM8L15x SPL
После создания проекта по шаблону он должен сразу полностью компилиться, выдавая одно предупреждение по поводу «ITC_GetCPUCC»(на него надо забить).
В настройках проекта сразу выбран STM8L152C6 (STM8L-DICOVERY). Там же в настройках компилятора задефайнено следующее:
STM8L15X_MD
HSE_VALUE=((uint32_t)16000000)
LSE_VALUE=((uint32_t)32768)
HSI_VALUE=((uint32_t)16000000)
LSI_VALUE=((uint32_t)38000)

Соответственно, чтобы подправить семейство или тактовые частоты, достаточно просто подправить эти дефайны. Ну а если кому-то больше нравится править внутри хедеров, то эти дефайны могут быть найдены в stm8l15x.h

Отличие от исходной библиотеки заключается в организации прерываний:

  • файл stm8l15x_it.h. Выкинул все лишнее, оставив прототипы функций-обработчиков прерываний.
  • Файл stm8l15x_it.с. Состоит только из заглушек обработчиков вида:
    ...
    #ifndef ADC1_COMP_IRQ 
    //ADC1/Comparator Interrupt routine.
    INTERRUPT_HANDLER(ADC1_COMP_IRQHandler,18)
    {
    	while (1){};
    }
    #endif
    ...
    
  • файл stm8l15x_conf.h. По умолчанию закоментированы хедеры всех периферийных блоков, кроме stm8l15x_clk.h и stm8l15x_gpio.h. Добавил блок дефайнов вида:
    /* Uncomment the line below to create your own interrupt handlers */
    //#define TRAP_IRQ                            /* TRAP */
    //#define FLASH_IRQ                           /* FLASH EOP/PG_DIS */
    //#define DMA1_CHANNEL0_1_IRQ                 /* DMA1 Channel0/1 */
    //#define DMA1_CHANNEL2_3_IRQ                 /* DMA1 Channel2/3 */
    ...
    
    Работает так: если дефайн закоментирован, то при возникновении случайно разрешенного прерывания контроллер мертво повисает в обработчике-заглушке. Для того чтобы воспользоваться обработчиком в своих целях — раскоментируем нужный дефайн, и размещаем обработчик там где хочется.
STM8S SPL
После создания проекта по шаблону он также должен сразу полностью компилиться, выдавая такое же предупрежедение.
В настройках проекта сразу выбран STM8S003F3. Там же в настройках компилятора задефайнено следующее:
STM8S003
HSE_VALUE=((uint32_t)16000000)
HSI_VALUE=((uint32_t)16000000)
LSI_VALUE=((uint32_t)128000)

В этой библиотеке пришлось править чуть больше, так как она рассчитана на большое количество мк с разной периферией, а следовательно щедро приправлена директивами условной компиляции.
Подвергнуты изменениям:
  • файлы stm8l15x_conf.h, stm8l15x_it.h, stm8l15x_it.с.Изменения аналогичны правкам в STM8L SPL выше.
  • файлы stm8s_adc1.c, stm8s_adc2.c, stm8s_can.c, stm8s_uart1.c, stm8s_uart2.c, stm8s_uart3.c, stm8s_uart4.c, stm8s_tim2.c, stm8s_tim3.c, stm8s_tim4.c, stm8s_tim5.c, stm8s_tim6.c. Все тело этих файлов заключено в директивы условной компиляции, аналогичные директивам в stm8s.h в разделе «Peripherals declarations». Просто структуры некоторых периферийных блоков не будут создаваться, если выбрано семейство мк, где они отсутствуют. В файлах же идет активное обращение к этим структурам, и чтобы избежать ошибок, нужно либо удалять файлы, либо оборачивать их в блоки условной компиляции.

Если вдруг найдутся ошибки, то пишите — исправлю.

alexxlab

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

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