piątek, 9 maja 2014

STM32F429i - User Button - zmiana stanu diod za pomocą buttona

W dzisiejszym artykule opowiemy sobie jak mrugać naszymi diodami na pinach
 PG13 i PG14 za pomocą buttona, który mamy do dyspozycji. Jak wiadomo z
user manuala button ten jest na pinie PA0. Skonfigurujemy sobie go w taki sposób
aby przy wciśnięciu i zwolnieniu stany naszych dwóch diod się zmieniały.
Oczywiście w kodzie zmieściłem stosowne komentarze co pomoże w zrozumieniu
kodu. Kod jest modyfikacją kodu do mrugania diodami z poprzedniej lekcji.

#include "main.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"


void Delay(volatile uint32_t nCount);
void Diody_Init(void);
void Button_Init(void);

int main(void)
{
  SystemInit();
  Diody_Init();
  Button_Init();

  while(1)
  {
   if(GPIOA->IDR & 0x0001) //sprawdzanie IDR (input data register)

   {
    GPIOG->ODR |= GPIO_Pin_13; // zapalenie diody
    GPIOG->ODR &=~ GPIO_Pin_14; // zapalenie diody

   }
   else
    {
       GPIOG->ODR &=~ GPIO_Pin_13; // zgaszenie diody
       GPIOG->ODR |= GPIO_Pin_14; // zgaszenie diody
    }

  }
}
void Diody_Init(void) {
  GPIO_InitTypeDef GPIO_InitStructure;

  // włączenie zegara
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); //ustawienie zegara

  // ustawienie pinów portu G
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
}

void Button_Init(void){
 GPIO_InitTypeDef GPIO_InitStructure;
 //ustawienie zegara
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);


 //ustawienie user buttona na Pinie PA0
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;    //ustawienie pinu PA0
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;    //button jako wejcie
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//ustawienie prędkoci GPIO
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   //ustawienie pinu w trybie push/pull
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;   //włączenie rezystora pulldown
 GPIO_Init(GPIOA, &GPIO_InitStructure);     //przekazanie parametró do funkcji inicjalizacyjnej
}


void Delay(volatile uint32_t nCount) { // funkcja opóźniająca
  while(nCount--)
  {
  }
}


Cały projekt jest do pobrania w poprzedniej lekcji z mruganiem diodami, więc stamtąd można sobie go pobrać i stosownie pozmieniać odpowiednie linie kodu. Przyjemnej zabawy:)

Brak komentarzy:

Prześlij komentarz