LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

Przykład 2 – wykorzystanie linii GPIO (joystick)

W ćwiczeniu należy zaświecić diodę LED po przechyleniu joysticka.W ćwiczeniu należy zaświecić diodę LED po przechyleniu joysticka. Sposób dołączenia diod LED oraz joysticka do mikrokontrolera jest następujący:

 

 

 

 

 

 

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)
  {
    if(GPIO_ReadInputDataBit(GPIOE, JOY_R) == 0)          
      GPIO_ResetBits(GPIOE, GPIO_Pin_15);
    else
      GPIO_SetBits(GPIOE, GPIO_Pin_15);

    if(GPIO_ReadInputDataBit(GPIOE, JOY_L) == 0)
      GPIO_ResetBits(GPIOE, GPIO_Pin_14);
    else
      GPIO_SetBits(GPIOE, GPIO_Pin_14);
  }
}

Jak widać w nieskończonej pętli jest sprawdzany stan linii 11 i 12 portu E. Po wykryciu niskiego poziomu na tych liniach jest zapalana odpowiednia dioda LED. 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)

Funkcja GPIO_Configuration() ustawia linie wejścia-wyjścia w odpowiedni tryb pracy. W opisywanym przypadku konieczne jest ustawienie linii 14 i 15 portu E w tryb wyjściowy, natomiast linie 11 i 12 tego portu należy ustawić jako linie wejściowe. Jest to dokonywane za pomocą:

  // Configuration of LED pins
  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);

  // Configuration of joystick pins
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |
        GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  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);