Моргаем диодами при нажатии кнопки на stm32f4-discovery [ARM Cortex]

Речь пойдёт о программе на МК STM32 которая позволит нам зажигать диоды при нажатии кнопки.

Я пользуюсь отладочной платой STM32F4 discovery. Очёнь удобно и быстро. + не дорого

Приступим.
Я пользуюсь Eclipse + ST utility + gdb

Первым делом подключаем заголовочный файл для работы с контроллерами stm32f4 :

#include <stm32f4xx.h>

Как подключать либы рассказывать не буду.
Обзовём константу для управления портом D (там наши диоды) новым именем:

#define LED_PORT GPIOD

Также создадим константы для каждого пина порта с диодом:

#define LED_GREEN (1 << 12) /* port D, pin 12 */
#define LED_ORANGE (1 << 13) /* port D, pin 13 */
#define LED_RED (1 << 14) /* port D, pin 14 */
#define LED_BLUE (1 << 15) /* port D, pin 15 */

Теперь добавим функцию для инициализации необходимой переферии:

static inline void setup_leds(void){
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;    // разрешаем тактирование порта D (диоды)
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;   // и порта A (кнопка)

    GPIOA->MODER &= ~GPIO_MODER_MODER0;  // укажем что пин кнопки - вход
    LED_PORT->MODER |= GPIO_MODER_MODER12_0 | GPIO_MODER_MODER13_0 |
        GPIO_MODER_MODER14_0 | GPIO_MODER_MODER15_0;    /// на диоды - выход
}

Также укажем функцию которая гасит все диоды:

static inline void switch_leds_off(void){
    LED_PORT->ODR = 0;
}

Для разнообразия включать диоды будем прямо из функции main.

А вот и она:

void main(void){
  setup_leds();   // инициализация

  while (1)  {
      if (GPIOA->IDR & GPIO_IDR_IDR_0) {   // если кнопка нажата (на нулевом пине есть потенциал)

          LED_PORT->ODR = LED_BLUE | LED_ORANGE | LED_RED | LED_GREEN;  // включаем диоды

      } else {
            switch_leds_off();   //гасим

      }
  }
}

Теперь при нажатии по кнопке все диоды загорятся, а когда отпустите — потухнут.

Скачать проект.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий