pcus.ru
2015-05-19 11:42

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

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


Первым проектом на 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);
  }
}



Ну и напоследок (надеюсь что это станет доброй традицией) вставляю видео работы проекта.