щая определенный набор функций. Если плата подключается с помощью соединительных проводов или задействует всего несколько контактов, то она называется модулем.
Рассмотрим примеры шилдов и модулей, которые находят применение в проектах с Arduino:
•Ethernet Shield позволяет обеспечить связь Arduino с локальными и глобальными сетями. Имеет слот для MicroSD-карты, позволяющей хранить дополнительные объемы данных
•Relay Shield позволяет коммутировать сильноточные внешние цепи. Несет контакты для подключения четырех периферийных устройств и содержит всю необходимую обвязку для каждого реле, компактно размещенную на печатной плате.
•LCD Shield. Имеет LCD-экран и органы управления. Предназначен для организации интерактивного интерфейса.
•Energy Shield. Позволяет работать с различными источниками питания. Одно из возможных применений – обеспечение подзарядки мобильных телефонов и гаджетов.
•Motor Shield. Обеспечивает возможность управления электромоторами различных типов.
•SD Card Shield. Позволяет хранить большие массивы информации на внешних SD-картах. Совместим с картами памяти форматов SD, SDHC и MicroSD. SD Card Shield использует для передачи данных стандартный SPIинтерфейс.
•Wi-Fi Shield. Позволяет настроить передачу данных между устройствами с использованием технологии беспроводного сетевого соединения Wi-Fi.
•Codec Shield. Позволяет обрабатывать аудиоданные в реальном времени.
•GSM/GPRS Shield. Дает возможность использовать сети GSM/GPRS.
Врезультате разрабатываемое устройство приобретает способность осуществлять звонки и передачу коротких сообщений, а также доступ к мобильному Интернету.
•Модуль беспроводной связи nRF24L01. Предназначен для объедине-
ния распределенных модулей в системе автоматики различного назначения внутри помещений в отсутствие проводных соединений. Подключается к любому микроконтроллеру, имеющему интерфейс SPI.
11
•Модуль датчика температуры MCP9808. Дает возможность измере-
ния температуры в диапазоне от –20 °C до +100 °C для платы с необходимой периферией.
•Модуль драйвера шагового двигателя Pololu A4988. Имеет настраи-
ваемое ограничение по току, защиту от перегрева, поддерживает пять различных разрешений. Работает с напряжениями от 8 В до 35 В и может обеспечить токи до 1 А на фазу без охлаждения, и до 2 А с системой охлаждения.
•Bluetooth-модуль НС-06. Используется для организации управления Arduino с других устройств и передачи данных по беспроводному каналу.
•Модуль часов реального времени (RTC). Содержит часы реального времени с календарем. Реализована функция будильника.
Порядок выполнения работы
1.Выберите шилд или модуль из описанных ранее, позволяющий реализовать соответствующее задание.
2.Подключите выходы шилда (модуля) к Arduino.
3.Создайте скетч. К каждому модулю прилагается демонстрационная программа, загружаемая из Arduino IDE/сети Интернет, которую необходимо взять за основу вашей работы.
4.Загрузите скетч в память контроллера.
5.Запустите монитор порта для анализа работы скетча, если этого требует задание.
Варианты заданий
1.Цифровой термометр. По запросу с компьютера возвращает текущую температуру датчика.
2.Беспроводное управление светодиодом. Используйте две платы Arduino
идва приемопередатчика. По команде с компьютера Arduino, подключенная к нему по USB, должна передать команду о режиме свечения светодиода: «вкл», «выкл», мигает. Вторая Arduino принимает команду и исполняет ее.
3.GSM-сигнализация. С помощью Arduino и соответвующего шилда (модуля) необходимо по нажатию кнопки на макетной плате отправлять SMS выполяющему лабораторную работу о том, что нажата «тревожная» кнопка.
4.USB-часы. Оправляйте время на компьютер по команде с терминала в ответ на любой переданный символ. Модифицируйте программу, чтобы она позволяла выставлять время на RTC не при включении Arduino, а только при настройке.
12
5.Управляйте яркостью светодиода с помощью цифрового потенцио-
метра. Для задания первичного значения яркости светодиода используйте обычный потенциометр.
6.Подключите и испытайте любой другой модуль (по согласованию с преподавателем).
Лабораторная работа 4. ПЛАТФОРМА STM32: ЗНАКОМСТВО
С IDE И ОТЛАДОЧНОЙ ПЛАТОЙ
Цель работы – знакомство со средой разработки ПО для платформы STM32 Keil uVision5, разработка простой программы для STM32.
STM32 – семейство 32-разрядных микроконтроллеров (МК) на базе RISC-процессоров ARM от компании «ST Microelectronics». В данном пособии в качестве примера рассматривается отладочная плата STM32F103C8T6.
Основные блоки микроконтроллера – микропроцессорное ядро, система тактирования, шина адреса и шина данных, память (ОЗУ и ПЗУ) и периферийные устройства ввода–вывода.
Плата STM32 имеет несколько портов, каждый из которых может управлять 16-ю выводами МК. Каждый из выводов может иметь свою скорость тактирования и может быть настроен на работу в одном из нескольких режимов.
Выводы микроконтроллера способны выполнять множество функций, связанных со сбором и генерацией цифровых и аналоговых сигналов, а также так называемые альтернативные функции, когда управление выводами передается другому периферийному устройству: ШИМ-генераторы, реализация интерфейсов и т. п.
Программирование STM32 возможно в различных IDE: IAR Embedded Workbench, Coocox CoIDE, System Workbench for STM32, Atollic True Studio, Segger Embedded Studio, Keil uVision и другие. В настоящем учебном посо-
бии рассматривается среда Keil uVision5.
Чтобы облегчить настройку системы тактирования и инициализацию периферийных устройств, мы также будем пользоваться STM32CubeMX, имеющим удобный графический интерфейс и автоматически генерирующем код для начальной настройки микроконтроллера.
По сравнению с платформой Arduino контроль за выполнением программы и передача информации на STM32 через виртуальный COM-порт несколько сложнее, но при этом STM32 аппаратно поддерживает USB.
13
Порядок выполнения работы
1.Загрузить в МК какой-либо пример из стандартного набора поставки STM32Cube с пакетом поддержки под нужное ядро (F0, F1, F4 или F7) для конкретной отладочной платы, имеющейся в учебной лаборатории.
2.Модифицировать пример в соответствии с указанием преподавателя.
Контроль выполнения программы и передача
1.Откройте STM32 CubeMX, создайте новый проект. Во вкладке MCU Selector выберите тип микроконтроллера STM32F103C8T6.
2.Включите интерфейс USB и внутри группы MiddleWares определите
USB Device Class как Communication Device Class (Virtual Com Port). Выводы для USB будут сконфигурированы автоматически.
3.Перейдите на следующую вкладку Clock Configuration (в случае возникновения ошибки нажмите Yes, и CubeMX попытается автоматически подобрать требуемые настройки).
4.Нажмите Project → Generate Code, укажите имя проекта и его расположение, тип компилятора (MDK-ARM V5 для Keil). В следующей вкладке настройте вывод инициализации в качестве отдельных *.c + *.h файлов.
5.Запустите процесс генерации кода, дождитесь его окончания и откройте проект. Вокнеproject window откройтефайлmain.c вгруппеApplication/User.
6.После комментария Private variables объявите массив элементов типа uint8_t и заполните его произвольными символами.
После комментария Private function prototypes объявите функцию uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len). Это функция передачи массива данных через виртуальный COM-порт, и ее определение можно найти, нажав на функции правой кнопкой и выбрав Go to Definition.
7.Напишите код, отправляющий созданный массив данных на порт в бесконечном цикле с некоторой задержкой HAL_Delay().
8.Скомпилируйте проект, убедитесь, что ошибки отсутствуют, подключите отладочную плату к разъему USB ПК и нажмите load (или F8), чтобы загрузить прошивку.
В случае возникновения проблем попробуйте начать прошивку микроконтроллера с нажатой кнопкой Reset. После ее отпускания прошивка должна загрузиться.
9.Подключите плату по тому интерфейсу USB, который был настроен ранее. На компьютере откройте монитор последовательного порта через Arduino IDE. Убедитесь, что порт активен и информация передается.
14
Лабораторная работа 5. ПЛАТФОРМА STM32: РАБОТА С ОС РЕАЛЬНОГО ВРЕМЕНИ
Цель работы – знакомство c функциональными возможностями ОСРВ
FreeRTOS.
Операционная система реального времени (ОСРВ, англ. – Real Time Operation System, RTOS) – это ОС, предназначенная для обеспечения режима реального времени при решении вычислительных задач.
Семафор – объект, ограничивающий количество потоков, которые могут войти в заданный участок кода. Семафоры используются для синхронизации и защиты данных при передаче через общую память, а также для синхронизации работы процессов и потоков.
Очередь – абстрактный тип данных с дисциплиной доступа к элементам вида «первый пришел – первый вышел». Добавление элемента возможно лишь в конец очереди, а выборка только из начала очереди, при этом выбранный элемент из очереди удаляется.
Поток ОС – наименьшая единица обработки, исполнение которой может быть назначено ядром операционной системы. Потоковая система имеет встроенный механизм распределение ресурсов и управления процессами.
Порядок выполнения работы
Реализуйте мигание светодиодами определенным образом при нажатии на кнопку, используя возможности ОСРВ: очереди, семафоры и потоки.
Очереди:
1.В STM32CubeMX создайте проект, поддерживающий использование
FreeRTOS.
2.Откройте его в Keil uVision5 и отредактируйте файл main.c. Удалите строки, содержащие автоматически созданную переменную defaultTaskHandle, прототип функции StartDefaultTask, ее реализацию и создание потока (osThreadDef) в теле функции main(void). Теперь после прототипа функции MX_GPIO_Init(void) нужно создать прототипы следующих функций:
static void StartThread(void const * argument); static void WorkThread(void const * argument); static void PD12Thread(void const * argument); static void PD13Thread(void const * argument); static void PD14Thread(void const * argument); static void PD15Thread(void const * argument);
15