• г. Москва, Зеленый проспект д.13/30, 3 этаж, офис 23 (вход со двора)
  • info@pcus.ru
Пн-Пт
с 10:00 до 17:00

Ваша корзина пуста!

STM32F4discovery Первый проект. Мигаем диодом

STM32F4discovery Первый проект. Мигаем диодом

2019-03-25 06:59:08   0   3946


Первым проектом на STM32F4discovery как это принято будет Hello World, в нашем случае это будут 4 светодиода (зеленый, оранжевый, красный и синий) которые мы будем последовательно зажигать. 
И так, предположим что у нас есть уже готовый к работе проект, если нет то прочтите сначала вот эту статью.



Первым делом подключаем файл библиотеки:

#include <stm32f4xx.h>


Затем инициализируем GPIO:

GPIO_InitTypeDef  GPIO_InitStructure;


Теперь что бы диоды загорались по очереди, нам нужна функция задержки:

void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
  }
}


Теперь переходим непосредственно к программе, включаем тактирование порта D:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);


Дальше дальше конфигурируем выводы PD12, PD13, PD14 и PD15 на которых собственно и висят наши диоды:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOD, &GPIO_InitStructure);


Теперь остается только зажигать ждать и сбрасывать:

  while (1)
  {
    /* зажигаем зеленый (PD12) */
    GPIO_SetBits(GPIOD, GPIO_Pin_12);
    
    /* Задержка */
    Delay(0x3FFFFF);
    
    /* зажигаем оранжевый (PD13) */
    GPIO_SetBits(GPIOD, GPIO_Pin_13);
    
    /* Задержка */
    Delay(0x3FFFFF);
  
    /* зажигаем красный (PD14) */
    GPIO_SetBits(GPIOD, GPIO_Pin_14);
    
    /* Задержка */
    Delay(0x3FFFFF);
    
    /* зажигаем синий (PD15) */
    GPIO_SetBits(GPIOD, GPIO_Pin_15);
    
    /* Задержка */
    Delay(0x7FFFFF);
    
    /* сбрасываем все 4-ре */
    GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
    
    /* Задержка */
    Delay(0xFFFFFF);
  }



Ну и полный код программы который должен был у вас получиться:

#include 

GPIO_InitTypeDef  GPIO_InitStructure;

void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
  }
}



int main(void)
{


  /* включаем тактирование порта D */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

  /* конфигурируем выводы  PD12, PD13, PD14 и PD15 */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_Init(GPIOD, &GPIO_InitStructure);

  while (1)
  {
    /* зажигаем зеленый (PD12) */
    GPIO_SetBits(GPIOD, GPIO_Pin_12);
    
    /* Задержка */
    Delay(0x3FFFFF);
    
    /* зажигаем оранжевый (PD13) */
    GPIO_SetBits(GPIOD, GPIO_Pin_13);
    
    /* Задержка */
    Delay(0x3FFFFF);
  
    /* зажигаем красный (PD14) */
    GPIO_SetBits(GPIOD, GPIO_Pin_14);
    
    /* Задержка */
    Delay(0x3FFFFF);
    
    /* зажигаем синий (PD15) */
    GPIO_SetBits(GPIOD, GPIO_Pin_15);
    
    /* Задержка */
    Delay(0x7FFFFF);
    
    /* сбрасываем все 4-ре */
    GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
    
    /* Задержка */
    Delay(0xFFFFFF);
  }
}