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:
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);