RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Сентябрь 2020
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930    

Календарь Календарь

Последние темы
» Тема для вопросов, консультаций и т. д...
автор Atari1974 Вчера в 16:12

» ZX Microdrive
автор barsik Вчера в 02:44

» Флейм только по теме "Радио-86РК".
автор barsik Пн Сен 28 2020, 09:24

» Трансформатор электронный Taschibra 230/12В 60Вт для галогенных ламп. Перестал работать.
автор Viktor2312 Ср Сен 23 2020, 15:05

» Купил с али БП 12в 100w для питания LED лент подсветки. Проблема
автор Viktor2312 Вс Сен 20 2020, 18:07

» Жалобы/пожелания по работе форума
автор Viktor2312 Вс Сен 20 2020, 11:54

» Стабилизированный преобразователь напряжения.
автор Viktor2312 Пн Сен 14 2020, 23:12

» Простые доработки ZX-48К: RAM-монитор в ПЗУ и экран на E000
автор barsik Сб Сен 12 2020, 23:47

» Применение КР580 ВИ53 для генерации музыки
автор Viktor2312 Сб Сен 12 2020, 20:09

» STM32. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Сен 03 2020, 12:09

» STM32G0. Документация (Datasheet, разное).
автор Viktor2312 Чт Сен 03 2020, 11:52

» Новинки. Книги. Часть 1.
автор Viktor2312 Ср Сен 02 2020, 14:21

» STM32F4. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Сен 01 2020, 14:44

» Ленинград-0,-1,-2,-3. Статьи, заметки, очерки, разное...
автор barsik Вс Авг 30 2020, 08:32

» Ленинград-0
автор barsik Вс Авг 30 2020, 08:01

» STM32F4. Изучение.
автор Viktor2312 Пт Авг 28 2020, 00:07

» Орион-128: Полезные доработки ПЭВМ
автор barsik Чт Авг 27 2020, 11:21

» STM32H7. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Авг 25 2020, 10:43

» Радио-86РК: По страницам журнала "Радио" и не только...
автор barsik Вт Авг 25 2020, 01:28

» STM32L0. Документация (Datasheet, разное).
автор Viktor2312 Вс Авг 23 2020, 10:10

» STM32L0. Отладочные платы.
автор Viktor2312 Сб Авг 22 2020, 20:22

» STM32L0. Программное обеспечение, разное...
автор Viktor2312 Сб Авг 22 2020, 17:24

» STM32L0. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Авг 20 2020, 19:37

» STM32H7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:33

» STM32F7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:32

Самые активные пользователи за месяц
Viktor2312
STM32L0. Программное обеспечение, разное... Vote_l10STM32L0. Программное обеспечение, разное... Voting10STM32L0. Программное обеспечение, разное... Vote_r10 
barsik
STM32L0. Программное обеспечение, разное... Vote_l10STM32L0. Программное обеспечение, разное... Voting10STM32L0. Программное обеспечение, разное... Vote_r10 
Atari1974
STM32L0. Программное обеспечение, разное... Vote_l10STM32L0. Программное обеспечение, разное... Voting10STM32L0. Программное обеспечение, разное... Vote_r10 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


STM32L0. Программное обеспечение, разное...

Перейти вниз

STM32L0. Программное обеспечение, разное... Empty STM32L0. Программное обеспечение, разное...

Сообщение  Viktor2312 в Сб Авг 22 2020, 12:10

1
.
Сборник сниппетов для STM32L0.


____Компания STMicroelectronics выпустила набор сниппетов STM32SnippetsL0 для микроконтроллеров STM32L0 c ультра низким потреблением на ядре Cortex-M0+. Сниппеты — это небольшие фрагменты кода, написанные на языке C в формате базовых функций для работы с периферийными устройствами.
____Сниппеты основаны на прямом обращении к регистрам периферии микроконтроллеров. Тем самым у тех разработчиков, которые не любят использовать библиотеки, есть возможность использовать сниппеты в процессе написания приложения. В отличие от библиотеки стандартной периферии, сниппеты работают непосредственно с регистрами, что позволяет создавать максимально эффективный компактный код.
____STM32Snippets являются дополнением к более мощному программному инструменту STM32Cube, который позволяет осуществлять полную настройку и генерацию кода для STM32.


Основные параметры.

  • Код на языке С для микроконтроллеров STM32L0.

  • Прямой доступ к регистрам по стандарту CMSIS Cortex-M0+ через файл stm32l0xx.h.

  • Self-documented code.

  • Совместим с MISRA.

  • Примеры для EWARM и MDK-ARM.

Справка из википедии:
Сниппет (англ. snippet — фрагмент, отрывок) в практике программирования — небольшой фрагмент исходного кода или текста, пригодный для повторного использования. Сниппеты не являются заменой процедур, функций или других подобных понятий структурного программирования. Они обычно используются для более лёгкой читаемости кода функций, которые без их использования выглядят слишком перегруженными деталями, или для устранения повторения одного и того же общего участка кода.

Набор примеров кода для STM32L0, можно скачать: тут

Или тут: Сниппеты STM32L0 (6.86 Мб). Резервная копия: Скачать

Пакет драйверов STM32CubeL0 (20.14 Мб). Резервная копия: Скачать

Кодогенератор STM32CubeMX (55.69 Мб). Резервная копия: Скачать

Драйвер для работы с дисплеем «электронная бумага» (9.52 Мб). Резервная копия: Скачать


.


Последний раз редактировалось: Viktor2312 (Вс Авг 23 2020, 09:31), всего редактировалось 7 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12512
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

STM32L0. Программное обеспечение, разное... Empty .

Сообщение  Viktor2312 в Сб Авг 22 2020, 17:24

2
.
Шпаргалки для разработчика: сниппеты для STM32.

2 декабря 2014г.

Взаимодействие пользовательского кода с регистрами ядра и периферии микроконтроллеров STM32 может быть осуществлено двумя способами: с помощью стандартных библиотек или с помощью наборов сниппетов (программных подсказок). Выбор между ними зависит от объёма собственной памяти контроллера, требуемого быстродействия, срока выполнения разработки. В статье анализируются особенности структуры, достоинства и недостатки наборов сниппетов для микроконтроллеров семейств STM32F1 и STM32L0 производства компании STMicroelectronics.

STM32L0. Программное обеспечение, разное... 31413859

____Одно из преимуществ использования микроконтроллеров STMicroelectronics – широкий спектр средств разработки: документации, отладочных плат, программного обеспечения.
____Программное обеспечение для STM32 включает в себя собственное ПО производства компании STMicroelectronics, источники Open Source, коммерческое ПО.
____ПО от STMicroelectronics обладает важными достоинствами. Во-первых, оно доступно для бесплатного скачивания. Во-вторых, программные библиотеки представлены в виде исходных кодов – пользователь сам может модифицировать код, учитывая незначительные ограничения, описанные в лицензионном соглашении.
____Библиотеки STMicroelectronics соответствуют ANSI-C и могут быть разделены по уровню абстракции (рисунок 1):

  • CMSIS (Core Peripheral Access Layer) – уровень регистров ядра и периферии, ARM библиотека;

  • Hardware Abstraction Layer – низкоуровневые библиотеки: стандартные библиотеки периферии (standard peripheral library), наборы сниппетов (snippets);

  • Middleware – библиотеки среднего уровня: операционные системы реального времени (RTOS), файловые системы, USB, TCP/IP, Bluetooth, Display, ZigBee, Touch Sensing и другие;

  • Application Field – библиотеки прикладного уровня: аудио, управление двигателями, автомобильные и промышленные решения.

____На рисунке 1 видно, что для взаимодействия с уровнем CMSIS компания STMicroelectronics предлагает использовать два основных инструмента – стандартные библиотеки и сниппеты.

STM32L0. Программное обеспечение, разное... 31413898_m
Рис. 1. Структура ПО для микроконтроллеров STM32 производства STMicroelectronics.

____Стандартная библиотека – это набор драйверов. Каждый драйвер предоставляет пользователю функции и определения для работы с конкретным периферийным блоком (SPI, USART, ADC и так далее). Напрямую пользователь с регистрами уровня CMSIS не взаимодействует.
____Наборы сниппетов – это высокоэффективные программные примеры, использующие прямой доступ к регистрам CMSIS. Разработчики ПО могут использовать реализации функций из этих примеров в собственном коде.
____Каждый из способов имеет достоинства и недостатки. Выбор между ними делается с учётом доступного объема FLASH и ОЗУ, требуемого быстродействия, срока выполнения разработки, опытности программистов и других обстоятельств.

Уровень CMSIS.

____Микроконтроллер – это сложная цифро-аналоговая микросхема, состоящая из процессорного ядра, памяти, периферийных блоков, цифровых шин и так далее. Взаимодействие с каждым блоком происходит с помощью регистров.
____С точки зрения программистов, микроконтроллер представляет собой пространство памяти. В нём размещены не только ОЗУ, FLASH и EEPROM, но и программные регистры. Каждому аппаратному регистру соответствует ячейка памяти. Таким образом, чтобы записать данные в регистр или вычитать его значение, программисту необходимо обратиться к соответствующей ячейке адресного пространства.
____Человек имеет некоторые особенности восприятия. Например, символьные названия воспринимаются им гораздо лучше, чем адреса ячеек памяти. Это особенно заметно, когда используется большое число ячеек. В микроконтроллерах ARM число регистров, а значит, и используемых ячеек, превышает тысячу. Чтобы упростить работу, необходимо произвести определение символьных указателей. Это определение выполнено на уровне CMSIS.
____Например, чтобы установить состояние выводов порта А, нужно записать данные в регистр GPIOA_ODR. Это можно сделать двумя способами – воспользоваться указателем с адресом ячейки 0xEBFF FCFF со смещением 0x14 или применить указатель с символьным названием GPIOA и готовую структуру, определяющую смещение. Очевидно, что второй вариант гораздо проще для восприятия.
____CMSIS выполняет и другие функции. Он реализован в виде следующей группы файлов:

  • startup_stm32l0xx.s содержит ассемблерный стартовый код Cortex-M0+ и таблицу векторов прерываний. После выполнения стартовой инициализации происходит передача управления сначала функции SystemInit() (ниже будут приведены пояснения), а затем – основной функции int main(void);

  • stm32l0xx.h содержит определения, необходимые для выполнения основных операций с битами и определение типа используемого микропроцессора;

  • system_stm32l0xx.c/.h. После начальной инициализации выполняется функция SystemInit(). Она производит первичную настройку системной периферии, таймингов блока RCC;

  • stm32l0yyxx.h – файлы реализации конкретных микроконтроллеров (например, stm32l051xx.h). Именно в них определяются символьные указатели, структуры данных, битовые константы и смещения.


Взаимодействие с CMSIS. Стандартные библиотеки и сниппеты.

____Число регистров для микроконтроллеров STM32 в большинстве моделей превышает тысячу. Если использовать прямое обращение к регистрам, пользовательский код станет нечитаемым и абсолютно непригодным для поддержки и модернизации. Эта проблема может быть решена при использовании стандартной библиотеки периферии (standard peripheral library).
____Стандартная библиотека периферии – это набор низкоуровневых драйверов. Каждый драйвер предоставляет пользователю набор функций для работы с периферийным блоком. Таким образом пользователь использует функции, а не обращается напрямую к регистрам. При этом уровень CMSIS оказывается скрытым от программиста (рисунок 2а).

STM32L0. Программное обеспечение, разное... 31414059
а).

STM32L0. Программное обеспечение, разное... 31414075
б).

Рис. 2. Взаимодействие с CMSIS с помощью стандартной библиотеки (а) и сниппетов (б).

____Например, взаимодействие с портами ввода/вывода в STM32L0 реализовано с помощью драйвера, выполненного в виде двух файлов: stm32l0xx_hal_gpio.h и stm32l0xx_hal_gpio.c. В stm32l0xx_hal_gpio.h даны основные определения типов и функций, а в stm32l0xx_hal_gpio.c представлена их реализация.

Такой подход имеет вполне очевидные достоинства (таблица 1):

  • Быстрота создания кода. Программисту не требуется изучать перечень регистров. Он сразу начинает работать на более высоком уровне. Например, для прямого взаимодействия с портом ввода/вывода в STM32L0 необходимо знать и уметь работать с одиннадцатью регистрами управления/состояния, большинство из которых имеют до 32 настраиваемых битов. При использовании библиотечного драйвера достаточно освоить восемь функций.

  • Простота и наглядность кода. Пользовательский код не забит названиями регистров, может быть прозрачным и легко читаемым, что важно при работе команды разработчиков.

  • Высокий уровень абстракции. При использовании стандартной библиотеки код оказывается достаточно платформо-независимым. Например, если сменить микроконтроллер STM32L0 на микроконтроллер STM32F0, часть кода, работающего с портами ввода/вывода, вообще не придётся менять.

Таблица 1. Сравнение способов реализации пользовательского кода.

STM32L0. Программное обеспечение, разное... 31414199_m

____Наличие дополнительной оболочки в виде драйверов имеет и очевидные недостатки (таблица 1):

  • Увеличение объёма кода программы. Реализованные в библиотечном коде функции требуют дополнительного места в памяти.

  • Повышенные затраты ОЗУ за счёт увеличения числа локальных переменных и использования громоздких структур данных.

  • Снижение быстродействия за счёт увеличения накладных расходов при вызове библиотечных функций.

____Именно наличие этих недостатков приводило к тому, что пользователь зачастую был вынужден оптимизировать код – самостоятельно реализовывать функции взаимодействия с CMSIS, оптимизировать библиотечные функции, убирая всё лишнее, копировать реализации библиотечных функций непосредственно в свой код, использовать __INLINE-директивы для увеличения скорости выполнения. В результате, тратилось дополнительное время на доработку кода.
____Компания STMicroelectronics, идя навстречу разработчикам, выпустила сборники сниппетов STM32SnippetsF0 и STM32SnippetsL0.
____Сниппеты входят в пользовательский код (рисунок 2б).
____Использование сниппетов предоставляет очевидные преимущества:

  • повышение эффективности и быстродействия кода;

  • уменьшение объёма программы;

  • снижение объёмов используемой ОЗУ и нагрузки на стек.

____Впрочем, стоит отметить и недостатки:

  • уменьшение простоты и наглядности кода за счёт «загрязнения» его названиями регистров и самостоятельной реализацией низкоуровневых функций;

  • исчезновение платформо-независимости.

____Таким образом, выбор между стандартной библиотекой и сниппетами не является очевидным. В большинстве случаев стоит говорить не о конкуренции, а о взаимном их использовании. На начальных этапах для быстрого построения «красивого» кода, логично использовать стандартные драйвера. При необходимости оптимизации можно обратиться к готовым сниппетам, чтобы не тратить время на разработку собственных оптимальных функций.
____Стандартные библиотеки драйверов и сниппетов STM32F0 и STM32L0 (таблица 2) доступны для свободного скачивания на сайте www.st.com.

Таблица 2. Низкоуровневые библиотеки для STM32F10 и STM32L0.

STM32L0. Программное обеспечение, разное... 31414350_m

____Более тесное знакомство со сниппетами, как и с любым ПО, следует начинать с рассмотрения особенностей лицензионного соглашения. Ха-ха-ха...  clown


Лицензионное соглашение.

____Любой ответственный программист перед использованием сторонних программных продуктов внимательно изучает лицензионное соглашение. Несмотря на то, что сборники сниппетов производства STMicroelectronics не требуют лицензирования и доступны для свободного скачивания, это не значит, что на их использование не накладываются ограничения.
____Лицензионное соглашение входит в комплект всех свободно скачиваемых продуктов производства компании STMicroelectronics. После загрузки STM32SnippetsF0 и STM32SnippetsL0 в корневом каталоге легко обнаружить документ MCD-ST Liberty SW License Agreement V2.pdf, который знакомит пользователя с правилами использования данного ПО.
____Пользователю STM32SnippetsF0 и STM32SnippetsL0 разрешается:

  • копировать, модернизировать исходный код для создания программных продуктов, предназначенных для собственного использования;

  • использовать/модернизировать исходный код для разработки и производства своих приборов;

  • использовать предоставленную документацию для поддержки своих продуктов;

  • производить, использовать, продавать приборы, созданные с использованием данного ПО или его модификаций.

____Пользователю STM32SnippetsF0 и STM32SnippetsL0 запрещается:

  • продавать, подвергать дополнительному лицензированию, сдавать в аренду предлагаемое ПО или его части;

  • использовать, модернизировать предлагаемое ПО для процессоров других производителей;

  • использовать предлагаемое ПО или его части в своих программных продуктах с целью дальнейшей продажи или лицензирования.

____Стоит обратить внимание на пункт «NO WARRANTY», в котором чётко говорится о том, что компания STMicroelectronics не гарантирует отсутствие ошибок в ПО, полную совместимость со всеми возможными конфигурациями «железа» и компиляторами. Компания не берёт на себя ответственность при возникновении аварийных ситуаций, даже возникших по вине ПО.
____Это значит, что пользователь обязан сам оценивать риски при использовании сниппетов и сам должен их модернизировать, если вдруг возникнут ситуации несовместимости с оборудованием или компиляторами.
____Несмотря на столь угрожающие заявления, стоит отметить, что количество ошибок даже в новом ПО производства STMicroelectronics невелико. Как правило, ошибки оперативно устраняются при выходе свежих версий библиотек.


Структура наборов сниппетов STM32SnippetsF0 и STM32SnippetsL0.

____Рассмотрим структуру сборника сниппетов на примере STM32SnippetsL0. Набор STM32SnippetsF0 имеет схожую структуру.
____После выполнения загрузки и распаковывания архива в распоряжении пользователя оказывается папка STM32L0xx_Snippets_Package_V1.0.0 (рисунок 3).

STM32L0. Программное обеспечение, разное... 31414520_m
Рис. 3. Структура сборника сниппетов STM32SnippetsL0.

____Основными подкаталогами сборника являются: Drivers\CMSIS и Project. Для STM32SnippetsF0, вместо папки Drivers\CMSIS реализована папка Library\CMSIS.
____В папке Drivers\CMSIS можно найти файлы уровня CMSIS, в том числе – файлы stm32l0yyxx.h с определением символьных указателей для различных микроконтроллеров. Поддерживаются все микроконтроллеры STM32L0: STM32L063, STM32L062, STM32L061, STM32L053, STM32L052, STM32L051.
____В папке Project содержатся подкаталоги с примерами для конкретных периферийных блоков, готовые проекты для ARM Keil и EWARM, а также файлы main.c.


Запуск и особенности использования наборов сниппетов
STM32SnippetsF0 и STM32SnippetsL0.

____Особенностью данных наборов сниппетов является их платформозависимость. Они предназначены для работы с конкретными платами. STM32SnippetsL0 использует платформу STM32L053 Discovery board, а STM32SnippetsF0 – плату STM32F072 Discovery board.
____При использовании плат собственной разработки код и проекты должны быть изменены, об этом будет более подробно рассказано в последнем разделе.
____Для запуска примера необходимо выполнить ряд шагов:

  • запустить готовый проект из директории с требуемым примером. Для простоты можно воспользоваться готовыми проектами для сред ARM Keil или EWARM, расположенными в папке MDK-ARM\ и EWARM\ соответственно;

  • включить питание отладочной платы STM32L053 Discovery/STM32F072 Discovery;

  • подключить питание отладочной платы к ПК с помощью USB-кабеля. Благодаря встроенному отладчику ST-Link/V2 дополнительного программатора не потребуется;

  • открыть, настроить и запустить проект;

  • Для ARM Keil:

    • открыть проект;

    • скомпилировать проект – Project → Rebuild all target files;

    • загрузить его в контроллер – Debug → Start/Stop Debug Session;

    • запустить программу в окне Debug → Run (F5).


  • Для EWARM:

    • открыть проект;

    • скомпилировать проект – Project → Rebuild all;

    • загрузить его в контроллер – Project → Debug;

    • запустить программу в окне Debug → Go(F5).


  • провести тестирование в соответствии с алгоритмом, описанном в main.c.

____Для анализа программного кода рассмотрим конкретный пример из STM32SnippetsL0: Projects\LPUART\01_WakeUpFromLPM\.


Запуск примера для LPUART.

____Отличительной особенностью новых микроконтроллеров семейства STM32L0 на ядре Cortex-M0+ является возможность динамического изменения потребления за счёт большого числа нововведений. Одним из таких новшеств стало появление Low Power-периферии: 16-битного таймера LPTIM и приёмопередатчика LPUART. Эти блоки обладают способностью тактирования, не зависящего от тактирования основной периферийной шины APB. При необходимости снижения потребляемой мощности рабочая частота шины APB (PCLK) может быть уменьшена, а сам контроллер переведён в режим пониженного потребления. При этом Low Power-периферия продолжает работу с максимальной производительностью.
____Рассмотрим пример из директории Projects\LPUART\01_WakeUpFromLPM\, в котором рассматривается возможность независимой работы LPUART в режиме пониженного потребления.

STM32L0. Программное обеспечение, разное... 31415573
Рис. 4. Состав стандартного проекта.

____При открытии проекта в среде ARM Keil отображаются всего три файла: startup_stm32l053xx.s, system_stm32l0xx.c и main.c (рисунок 4). В случае применения стандартной библиотеки в проект было бы необходимо добавить файлы драйверов.


Функционирование и анализ структуры файла Main.c.

____Программа из выбранного примера выполняется в несколько этапов.
____После старта запускается функция SystemInit(), реализованная в system_stm32l0xx.c. Она проводит настройку параметров блока тактирования RCC (тайминги и рабочие частоты). Далее осуществляется передача управления в основную функцию int main(void). В ней инициализируется пользовательская периферия – порты вводы/вывода, LPUART – после чего контроллер переводится в режим пониженного потребления STOP. В нём обычная периферия и ядро остановлены, работает только LPUART. Он ждёт начала передачи данных от внешнего устройства. При приходе стартового бита LPUART пробуждает систему и принимает сообщение. Приём сопровождается мерцанием светодиода отладочной платы. После этого контроллер вновь переводится в состояние STOP и ждёт следующей передачи данных, если не было обнаружено ошибок.
____Передача данных происходит при помощи виртуального COM-порта и дополнительного ПО.
____Рассмотрим main.c из нашего проекта. Этот файл представляет собой стандартный С-файл. Главной его особенностью является самодокументация – наличие подробных комментариев, пояснений и рекомендаций. Пояснительная часть содержит несколько разделов:

  • заголовок с указанием названия файла, версии, даты, автора, краткого пояснения назначения;

  • описание последовательности настройки системной периферии (RCC specific features): FLASH, ОЗУ, системы питания и тактирования, периферийных шин и так далее;

  • перечень используемых ресурсов микроконтроллера (MCU Resources);

  • краткое пояснение по использованию данного примера (How to use this example);

  • краткое пояснение по тестированию примера и алгоритм его проведения (How to test this example).

____Функция int main(void) имеет компактную форму и снабжена комментариями, которые в листинге 1, для большей наглядности, переведены на русский.

Листинг 1. Пример реализация функции main

int main(void)
{
/* К началу выполнения этой части когда уже произведена конфигурация системных блоков в функции SystemInit(), реализованной в system_stm32l0xx.c. */
/* конфигурация периферийных блоков*/
Configure_GPIO_LED();
Configure_GPIO_LPUART();
Configure_LPUART();
Configure_LPM_Stop();
/* проверка наличия ошибок при приеме */
while (!error) /* бесконечный цикл */
{
/* ожидание готовности LPUART и переход в режим STOP */
if((LPUART1->ISR & USART_ISR_REACK) == USART_ISR_REACK)
{
__WFI();
}
}
/* при возникновении ошибки */
SysTick_Config(2000); /* установка периода прерываний системного таймера 1 мс */
while(1);
}

____В файле main.c объявлены и определены функции конфигурации периферии и две функции обработки прерываний. Рассмотрим их особенности.
____В приведенном примере используются четыре функции конфигурации (листинг 2). Все они не имеют аргументов и не возвращают значений. Их главное предназначение – быстро и с наименьшими затратами занимаемого кода произвести инициализацию периферии. Это реализуется за счёт двух особенностей: применения прямого обращения к регистрам и использования директивы __INLINE (листинг 3).

Листинг 2. Объявление функций конфигурации периферии

void Configure_GPIO_LED(void);
void Configure_GPIO_LPUART(void);
void Configure_LPUART(void);
void Configure_LPM_Stop(void);

Листинг 3. Пример реализации __INLINE-функции с прямым доступом к регистрам LPUART

__INLINE void Configure_LPUART(void)
{
/* (1) Enable power interface clock */
/* (2) Disable back up protection register to allow the access to the RTC clock domain */
/* (3) LSE on */
/* (4) Wait LSE ready */
/* (5) Enable back up protection register to allow the access to the RTC clock domain */
/* (6) LSE mapped on LPUART */
/* (7) Enable the peripheral clock LPUART */
/* Configure LPUART */
/* (8 ) oversampling by 16, 9600 baud */
/* (9) 8 data bit, 1 start bit, 1 stop bit, no parity, reception mode, stop mode */
/* (10) Set priority for LPUART1_IRQn */
/* (11) Enable LPUART1_IRQn */
RCC->APB1ENR |= (RCC_APB1ENR_PWREN); /* (1) */
PWR->CR |= PWR_CR_DBP; /* (2) */
RCC->CSR |= RCC_CSR_LSEON; /* (3) */
while ((RCC->CSR & (RCC_CSR_LSERDY)) != (RCC_CSR_LSERDY)) /*(4)*/
{
/* add time out here for a robust application */
}
PWR->CR &=~ PWR_CR_DBP; /* (5) */
RCC->CCIPR |= RCC_CCIPR_LPUART1SEL; /* (6) */
RCC->APB1ENR |= RCC_APB1ENR_LPUART1EN; /*(7) */
LPUART1->BRR = 0x369; /* (8 ) */
LPUART1->CR1 = USART_CR1_UESM | USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_UE; /* (9) */
NVIC_SetPriority(LPUART1_IRQn, 0); /* (10) */
NVIC_EnableIRQ(LPUART1_IRQn); /* (11) */
}

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


Использование сниппетов в собственных разработках.

____Предложенные наборы сниппетов имеют ограничения: необходимо использовать отладочную плату STM32L053 Discovery board для STM32SnippetsL0, а плату STM32F072 Discovery board – для STM32SnippetsF0.
____Для применения сниппетов в своих разработках потребуется произвести ряд изменений. Во-первых, необходимо переконфигурировать проект под нужный процессор. Для этого в нём нужно сменить стартовый файл startup_stm32l053xx.s на файл другого контроллера и определить нужную константу: STM32L051xx, STM32L052xx, STM32L053xx, STM32L062xx, STM32L063xx, STM32L061xx, STM32F030, STM32F031, STM32F051 и другие. После этого при компиляции stm32l0xx.h, будет автоматически подключен нужный файл с определением периферии контроллера stm32l0yyxx.h (stm32l051xx.h/stm32l052xx.h/stm32l053xx.h/stm32l061xx.h/stm32l062xx.h/stm32l063). Во-вторых, нужно выбрать соответствующий программатор в настройках свойств проекта. В-третьих – изменить код функций из примеров, если они не отвечают требованиям пользовательского приложения.


Заключение.

____Наборы сниппетов и стандартные библиотеки периферии производства компании STMicroelectronics не являются взаимоисключающими. Они дополняют друг друга, добавляя гибкость при создании приложений.
____Стандартная библиотека даёт возможность быстрого создания ясного кода с высоким уровнем абстракции.
____Сниппеты позволяют повысить эффективность кода – увеличить производительность и сократить объём занимаемой памяти FLASH и ОЗУ.


Литература.

  1. Data brief. STM32SnippetsF0. STM32F0xx Snippets firmware package. Rev. 1. – STMicroelectronics, 2014.

  2. Data brief. STM32SnippetsL0. STM32F0xx Snippets firmware package. Rev. 1. – STMicroelectronics, 2014.

  3. MCD-ST Liberty SW License Agreement V2.pdfElectromechanical Relays. Technical Information. – STMicroelectronics, 2011.

  4. Data brief. 32L0538DISCOVERY Discovery kit for STM32L053 microcontrollers. Rev. 1. – STMicroelectronics, 2014.

  5. http://www.st.com/

***


.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12512
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения