Я уже писал о том как моргать диодами отладочной платы stm32f4-discovery, но это не дублирующая статья. Речь пойдёт о более быстром и простом методе работы с периферией stm32 контроллера.
Действительно было бы очень странно если бы для 32 битных контроллеров не было стандартных библиотек. Ведь не на ассемблере пишем же 😉
Я буду писать в Eclipse. Разницы как вы понимаете никакой (слава богу ide много но код в них не отличается).
Итак.
Подключим заголовочные файлы для работы:
#include <stm32f4xx.h> #include <stm32f4xx_rcc.h> // тактирование #include <stm32f4xx_gpio.h> // периферия // Перечисление групп переключаемых диодов: enum { LEDS_GROUP1 = GPIO_Pin_12 | GPIO_Pin_13, LEDS_GROUP2 = GPIO_Pin_14 | GPIO_Pin_15, };
Напомню, что диоды расположены на 12,13,14 и 15 выходах порта D.
Функция задержки:
void delay() { unsigned int i = 0; for (;i<10000000;i++){ __NOP(); /// делать "ничего" } }
Функция main:
Включаем тактирование порта D:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
Структура для инициализации периферии:
GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); // заполним стандартными значениями
Настроим необходимые значение, остальные оставим стандартными:
gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Mode = GPIO_Mode_OUT; // метим как выход gpio.GPIO_Pin = LEDS_GROUP1 | LEDS_GROUP2; // все выходы с диодами (12-15)
Инициализация:
GPIO_Init(GPIOD, &gpio);
Ну и бесконечный цикл программы:
do { GPIO_SetBits(GPIOD, LEDS_GROUP1); // включаем 1 группу диодов delay(); // ждём GPIO_ResetBits(GPIOD, LEDS_GROUP1); // выключаем delay(); //ждём /* тоже со второй группой */ GPIO_SetBits(GPIOD, LEDS_GROUP2); delay(); GPIO_ResetBits(GPIOD, LEDS_GROUP2); delay(); } while(1);
Таким образом будут мигать зелёный оранжевый диоды и синий с красным по очереди. Задержка не большая. Такчто переключения довольно быстрые.
Скачать проект.