LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

Przykład 1 – wykorzystanie linii GPIO (LED)

Celem niniejszego ćwiczenia będzie migotanie diodami LED. Sposób dołączenia diod LED do mikrokontrolera jest następujący:

$6

 Główna funkcja programu jest pokazana na list. 1.

List. 1. Funkcja główna przykładowego programu

int main(void)
{
  // GPIO Configuration
  GPIO_Configuration();
 
  while (1)
  {
    // Turn off D1
    GPIO_SetBits(GPIOE, GPIO_Pin_14);
    // Turn on D2
    GPIO_ResetBits(GPIOE, GPIO_Pin_15);
    // Insert delay
    Delay(0xAFFFF);

    // Turn off D2
    GPIO_SetBits(GPIOE, GPIO_Pin_15);
    // Turn on D1
    GPIO_ResetBits(GPIOE, GPIO_Pin_14);
    // Insert delay
    Delay(0xAFFFF);
  }
}

Jak widać w nieskończonej pętli while naprzemiennie są włączane diody LED D1 i D2. Dioda D1 jest dołączona do linii 14 portu E (PE14), dioda D2 jest dołączona do linii 15 portu E (PE15). Diody są zapalane niskim poziomem napięcia na linii, który można uzyskać funkcją:

GPIO_ResetBits(nazwa_portu, numery_linii_do_wyzerowania) 

np. wyzerowanie linii 15 portu E następuje po wykonaniu funkcji:

GPIO_ResetBits(GPIOE, GPIO_Pin_15)

Na szczególną uwagę zasługuje 4 linia z listingu 1, w której jest wywoływana funkcja GPIO_Configuration() inicjalizująca odpowiednie linie wejścia-wyjścia. W opisywanym przypadku konieczne jest ustawienie linii 14 i 15 portu E w tryb wyjściowy. Jest to dokonywane za pomocą:

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

Dodatkowo konieczne jest dołączenie sygnału zegarowego do modułu portów wejścia-wyjścia (domyślnie sygnał zegarowy jest odłączony, aby mikrokontroler pobierał mniej prądu):

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);