Я уже писал о том как моргать диодами отладочной платы 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);
Таким образом будут мигать зелёный оранжевый диоды и синий с красным по очереди. Задержка не большая. Такчто переключения довольно быстрые.
Скачать проект.






