Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 1(45)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5

Библиографическое описание:
Емельянов Д.В. ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ STM32 ДЛЯ РАБОТЫ С ПЕРИФЕРИЕЙ // Студенческий: электрон. научн. журн. 2019. № 1(45). URL: https://sibac.info/journal/student/45/128411 (дата обращения: 27.11.2024).

ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ STM32 ДЛЯ РАБОТЫ С ПЕРИФЕРИЕЙ

Емельянов Дмитрий Владимирович

магистрант, кафедра информатики БГУИР,

РБ, г. Минск

Введение

Широкое распространение получили устройства, относящиеся к концепции Internet of Things, в частности умные счетчики. Предполагается, что в будущем устройства станут активными участниками информационных и социальных процессов, где они смогут взаимодействовать и общаться с окружающей средой.

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

В ходе реализации проекта была изучена и успешно применена библиотека STM32Cube. Библиотека STM32Cube облегчает разработку программы и делает код более универсальным для применения на других версиях микроконтроллеров линейки STM32.

Рассмотрим основные аспекты работы с библиотекой, исследованные в работе.

Периферия микроконтроллера

Разрабатываемое устройство работает с включенными модулями DMA, GPIO, NVIC и RCC. Внешняя флеш-память подключена к микроконтроллеру через SPI модуль. Так же используется встроенный USART модуль для передачи и считывания информации с измерителя.

Для правильной работы всех модулей им необходимо точное тактирование, которое должно соответствовать требованиям каждого модуля и должно поддерживаться в микроконтроллере. Подход к реализации тактирования микроконтроллеров изучался на примере работы [1, c. 28].

Библиотека STM32Cube

STM32Cube представляет собой полноценную SDK для разработки, которая значительно упрощает процесс реализации проекта.

STM32Cube состоит из:

  • утилиты STM32CubeMX;
  • пакета STM32Cube MCU.

Утилита STM32CubeMX – программный продукт, позволяющий при помощи графического интерфейса произвести настройку имеющейся периферии микроконтроллера.

На рынке существуют огромное количество микроконтроллеров даже в рамках одного производителя (Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4). Соответственно, встает вопрос о каком-то едином наборе библиотек и едином инструменте для настройки и конфигурирования всего этого многообразия. Для решения этих целей и был выпущен STM32CubeMx.

Как хорошо описано в [2, c. 52], утилита позволяет создать схематику для проекта, настройку периферии, режимы работы каждого конкретного вывода, а потом адаптировать проект под конкретный микроконтроллер. В результате программа выдает конфигурационный код на C, который можно использовать для дальнейшей реализации или модификации в проекте.

Однако главной частью SDK является полномасштабная библиотека для микроконтроллеров STM32, с помощью которой и реализовывался проект.

Пакет STM32Cube MCU – полноценная библиотека, позволяющая производить конфигурацию, обработку состояния и реализацию логики приложения с использованием периферии удобнее и кроссплатформенно.

Пакет STM32Cube MCU включает в себя:

  • HAL – модуль, реализующий портируемость кода между различными версиями микроконтроллеров.
  • LL-API – легкий, оптимизированный, достаточно низко интегрированный модуль, представляющий возможность изменения работы периферии по усмотрению разработчика.
  • Набор промежуточного ПО между низкоуровневой частью и уровнем приложения (RTOS, библиотека USD, файловая система, TCP/IP стек, библиотека сенсорного экрана, и многие другие).

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

Так как периферия используются в разных пакетах, то для удобной работы с ней в проекте были реализованы драйверы в виде отдельных модулей, представленные в дереве проекта согласно рисунку 3.4. Каждый драйвер представляет из себя программный интерфейс между библиотекой STM32Cube и модулями, которые ее используют.

Стоит заметить, что всем модули предполагают, что в проекте будет реализована низкоуровневая часть работы с периферией, такая как конфигурации аппаратной части, работа с векторами прерывания [11].

Опишем использование библиотеки STM32Cube на примере драйвера для UART.

Работа с модулем UART

Чтобы активировать модуль UART с помощью библиотеки STM32Cube в проекте необходимо выполнить ряд шагов.

Во-первых, необходимо объявить структуру UART_HandleTypeDef, через которую в последствии будет идти обращение для работы с сконфигурированным модулем.

Во-вторых, необходимо инициализировать низкоуровневый уровень UART. Для этого необходимо реализовать функцию HAL_UART_MspInit, которая должна:

  • сконфигурировать тактирование периферии;
  • перевести выводами UART в первоначальное состояние;
  • активировать тактирования выводов;
  • сконфигурировать режим работы выводов общего назначения в альтернативное состояние;
  • установить необходимые параметры UART, такие как скорость работы, длинна слова, включение бита остановки.

Если работа с UART в проекте происходит через прерывания по событию, то необходимо сконфигурировать вектор прерываний и приоритет прерываний.

Если работа с UART происходит через DMA модуль, то использование библиотеки предполагает дополнительную конфигурацию модуля, а именно необходимо:

  • объявить DMA структуру для инициализации каналов передачи и приема данных;
  • включить тактирование DMA модуля;
  • передать инициализированную структуру модуля DMA в структуру модуля UART;
  • Сконфигурировать вектор прерываний и приоритет прерывания для DMA каналов.
  • В зависимости от выбранного режима работы UART модуля работа с периферией через библиотеку STM32Cube происходит через определённые функции.

Для выбора определённого режима работы должна быть вызвана соответствующая инициализирующая функция.

Асинхронный режим активируется функцией HAL_UART_Init, полудуплексный режим задается функцией HAL_HalfDuplex_Init, режим внутреннего соединения активируется функцией HAL_LIN_Init, многопроцессорный режим предполагает использование функции HAL_MultiProcessor_Init, HAL_RS485Ex_Init активирует режим RS485.

Работа с модулем DMA

В STM32L4 выделают 4 режима работы: передача из памяти в память, передача из памяти на устройство, передача из устройства на память, передача из устройства на устройство.

Нас интересует режим передачи из устройства в память, т.к. главная цель использования DMA в проекте – считывание показаний измерителя.

Настройки DMA в библиотеке STM32Cube выполняется через структуру InitTypeDef, которая описана в файле stm32f10x_dma.h.

Структура InitTypeDef имеет следующие поля, описанные ниже.

DMA_PeripheralBaseAddr – адрес периферийного устройства, с которого необходимо считать или записать данные.

DMA_MemoryBaseAddr – адрес памяти, с которой необходимо работать модулю.

DMA_DIR задает направление передачи. Данные могут передаваться с периферии в память и наоборот, из памяти в периферию. Направление может принимать значение DMA_DIR_PeripheralDST для передачи на периферию и DMA_DIR_PeripheralSRC для считывания с периферии.

DMA_BufferSize – размер буфера данных.

DMA_PeripheralInc – указывает надо ли инкрементировать адреса данных в периферии. Согласно [3, c. 75], ряд устройств делают это автоматически, поэтому функция инкрементации адреса должна быть отключена для таких устройств. Параметр может принимать значение DMA_PeripheralInc_Enable для включения функции инкрементирования и DMA_PeripheralInc_Disable для ее отключения.

DMA_MemoryInc – указывает надо ли инкрементировать адреса данных в памяти, аналогично параметру DMA_PeripheralInc. DMA_PeripheralDataSize и DMA_MemoryDataSize задают размер единицы данных для периферии и размер единицы данных для памяти, а DMA_Mode – режим работы канала DMA.

Параметр DMA_Priority задает приоритет канала DMA. Приоритет может принимать значения DMA_Priority_VeryHigh, MA_Priority_High, DMA_Priority_Medium, DMA_Priority_Low в последовательности уменьшения приоритета.

Параметр DMA_M2M включает передачу из памяти в память.

Следует обратить внимание на работу функции USARTSendDMA. Фукнция записывает в буфер информацию для отправки и запускает DMA канал на отправку. Она является асинхронной, т.е. не ожидает конца отправки данных в отличии от функции USARTSend. Поэтому, если вызвать функцию передачи через DMA раньше, чем отправятся данные, буфер будет перезаписан новыми значениями.

 

Список литературы:

  1. Norris D., Programming with STM32: Getting Started with the Nucleo Board and C/C++ / D. Norris – McGraw-Hill Education, 2018. – 285 c.
  2. STM32CubeMX for STM32 configuration and initialization C code generation. [Electronic resource] / STM – User manual, 2017. – Mode of access: https://www.st.com/content/ – Date of access: 10.05.2018.
  3. Noviello C., Mastering STM32: A step-by-step guide to the most complete ARM Cortex-M platform, using a free and powerful development environment based on Eclipse and GCC / C. Noviello – Lean Publishing, 2016. – 118 c.

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.