Всем привет. Мы продолжаем свой цикл публикаций о постройке
квадрокоптера. В прошлой статье мы рассказали о подготовке проекта, поиске о
заказе необходимых деталей.
Платы нам пришли, детали из Китая идут полным ходом
(надеюсь, идут туда, куда, нужно), пора писать новую статью. В этой статье – начальное
описание платы STM32f3discovery, установка необходимого ПО для работы с STM32F3discovery, и первая программа – для перемигивания огоньков.
STM32 – что это?
(Информация ниже представляет собой перевод страницы официального сайта, пользовательского руководства и других документов. Ставим ©. 4-copter.blogspot.ru – скажем нет плагиату!)
Официальная информация.
STM32f3discovery включает в себя все
необходимое для начинающих и опытных пользователей, позволяя не тратить время на ненужные распайку и подключение и решительно приступить
к работе.
Построенная на основе STM32F303VCT6, плата включает в себя
встроенный инструмент отладки ST-LINK/V2, акселерометр, гироскоп, электронный
компас ST MEMS, USB-разъем, светодиоды и кнопки.
Полезные документы - user manual (схемы подключения, архитектура), programming manual (как и что программировать), reference manual, datasheet на чип stm32f303vc.
В нашем проекте понадобятся
- трехосевой MEMS-гироскоп с цифровым выходом L3GD20;
- МЭМС e-Compass с трехосевым акселерометром и трехосевым магнитным датчиком LSM303DLHC.
CooCox
Мы пользуемся средой программирования CocCox, скачать здесь (напрямую) или здесь (через CoCenter).
Дополнительно надо скачать и установить драйвер ST-LINK/V2.
Еще дополнительно - GCC (о да!).
Среда довольно приятная, есть много удобных фич, упрощающих нашу заполненную стрессами жизнь.
Испортим дефолтную прошивку.
Попробуем написать первую прогу. Пусть светодиоды завораживающе загораются.
Открываем CoIDE, идем Project -> New Project.
Придумываем имя проекта. Жмем далее
Здесь мастер предложит выбрать, под что будет создаваться программа - под конкретную плату или под чип. В случае с STM32f3discovery - выбираем chip. Далее.
Выбираем ST->STM32F303->STM32F303VC. Финиш.
Подключаем необходимые библиотеки - библиотеки работы с периферией RCC, библиотека работы с портами GPIO, остальные нужные библиотеки подключатся сами.
На плате есть светодиоды LD1 - LD10. LD1 и LD2 - системные, а LD3-LD10 можно помигать.
На этом рисунке - в нижней части в белом круге.
Они как бы подсоединены к выводам платы (которые по бокам), на discovery-плате это реализовано внутрисхемно.
Так, надо узнать - к каким выводам.
Лезем в user manual. Ищем подпункт LED's и видим:
Т.е, LED'ы подцеплены к порту E на выводы 8-15. Отлично.
Открываем main.c и пишем такой код:
//подключаем библиотеки #include "stm32f30x_gpio.h" #include "stm32f30x_rcc.h" #include "stm32f30x.h" #define DELAY_TIME 1000000 //Инициализация светодиодов (настройка порта на вывод информации) void initGPIOE() { GPIO_InitTypeDef gpio; //структура для инициализации порта RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE); //включаем тактирование //заполняем структуру gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_15 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_8; //инициализируем порт GPIO_Init(GPIOE, &gpio); } //Функция задержки времени void simpleDelay(unsigned int delayTime) { unsigned int i; for (i = 0; i < delayTime; i++); } int main(void) { initGPIOE(); while(1) { GPIO_SetBits(GPIOE, GPIO_Pin_9); //посылаем на вывод 1 - светодиод загорается simpleDelay(DELAY_TIME); //ждем GPIO_SetBits(GPIOE, GPIO_Pin_10); //загорается следующий simpleDelay(DELAY_TIME); GPIO_SetBits(GPIOE, GPIO_Pin_11); simpleDelay(DELAY_TIME); GPIO_SetBits(GPIOE, GPIO_Pin_12); simpleDelay(DELAY_TIME); GPIO_SetBits(GPIOE, GPIO_Pin_13); simpleDelay(DELAY_TIME); GPIO_SetBits(GPIOE, GPIO_Pin_14); simpleDelay(DELAY_TIME); GPIO_SetBits(GPIOE, GPIO_Pin_15); simpleDelay(DELAY_TIME); GPIO_SetBits(GPIOE, GPIO_Pin_8); simpleDelay(DELAY_TIME); GPIO_ResetBits(GPIOE, GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_8); //сбрасываем выводы - диоды гаснут } }Описание функций можно найти в библиотеках GPIO и RCC.
Должно заработать. Все, пока. В следующий раз - подключение акселерометра-компаса-гироскопа.
Комментариев нет:
Отправить комментарий