TECHNIKA
MIKROPROCESOROWA 1
GPIO
mgr inż. Sławomir Niespodziany
Zestaw uruchomieniowy NUCLEO-L053
■ Prefix`y dodane dla ułatwienia
■ Dokumentacja płytki PCB
– NUCLEO_en.DM00105823.pdf
■ Dokumentacja rodziny układów STM32L053x6/STM32L053x8 – DEVICE_stm32l053c6.pdf
■ Manual STM32L0x3
– MANUAL_en.DM00095744.pdf
Zestaw uruchomieniowy NUCLEO-L053R8
■ Dokumentacja płytki PCB
– Plik NUCLEO_en.DM00105823.pdf
■ Konkretny model mikrokontrolera – STM32L053R8T6
Programator/debugger
■ Zestaw sygnałów:
Programator/debugger
■ Zestaw sygnałów:
Obudowa układu
■ Dokumentacja rodziny układów:
– Plik DEVICE_stm32l053c6.pdf
Wyprowadzenia
■ Dokumentacja rodziny układów:
– Plik DEVICE_stm32l053c6.pdf
Struktura wewnętrzna
■ Dokumentacja ogólna
– Plik MANUAL_en.DM00095744.pdf
Struktura wewnętrzna
Struktura wewnętrzna
Budowa portu ogólnego przeznaczenia I
■ * Występują również wyprowadzenia szczególnego przeznaczenia
■ Wyprowadzenie („noga”, „pin”)
■ Blok GPIO
■ Układy peryferyjne
Budowa portu ogólnego przeznaczenia II
PA1 GPIOA1
USART2 TIM2
TX CH3
Budowa portu ogólnego przeznaczenia II
PA1 GPIOA1
USART2 TIM2
TX ctrl CH3
Budowa portu ogólnego przeznaczenia II
PA1 GPIOA1
USART2 TIM2
TX CH3
ctrl
Struktura bloku GPIO - ogólnie
Struktura bloku GPIO - wejście
Struktura bloku GPIO - wyjście
Push-pull vs Open-drain
Sterowanie blokiem GPIO
■ Sterowanie poprzez zapis/odczyt zawartości określonych rejestrów
■ Lista rejestrów – MODER – OTYPER – OSPEEDR – PUPDR – IDR
– ODR
– BSRR – LCKR – AFR[0]
– AFR[1]
– BRR
Sterowanie blokiem GPIO
■ Sterowanie poprzez zapis/odczyt zawartości określonych rejestrów
■ Lista rejestrów – MODER – OTYPER – OSPEEDR – PUPDR – IDR
– ODR
– BSRR – LCKR – AFR[0]
– AFR[1]
– BRR
Zadanie
■ Napisz program, który w trakcie wykrycia naciśnięcia przycisku zapali diodę LED – Wykrywanie, czy przycisk jest naciśnięty ?
■ Gdzie jest podłączony przycisk ?
■ Jak odczytać stan przycisku ?
– Zapalanie/gaszenie diody LED
■ Gdzie jest podłączona dioda ?
■ Jak zapalić/zgasić diodę ?
– Jak uzależnić od siebie te czynności ?
Połączenie diody LED na schemacie
■ Dokument NUCLEO_en.DM00105823.pdf
■ Dioda na schemacie „Extension connectors” (strona 66)
■ Połaczenie z mikrokontrolerem na schemacie
„STM32 MCU” (strona 64)
■ Sterowanie:
– Zapis wartości ,1’ do PA5 – dioda świeci (3.3V) – Zapis wartości ,0’ do PA5 – dioda nie świeci (0V)
Połączenie przycisku na schemacie
■ Dokument NUCLEO_en.DM00105823.pdf
■ Przycisk na schemacie „STM32 MCU” (strona 64)
■ Wartość odczytana na pinie PC13:
– ‚1’ jeżeli przycisk nie naciśnięty
(stan linii 3.3V, ze względu na rezystor R30)
– ‚0’ jeżeli przycisk naciśnięty (stan linii 0V, ze względu na zwarcie do masy przez przycisk)
Dostęp do rejestrów
■ Plik nagłówkowy (odpowiedni dla konkretnego mikrokontrolera) definiuje struktury ułatwiające dostęp do rejestrów znajdujących się w przestrzeni adresowej
■ Przykładowo: struktura „GPIO_TypeDef” zawiera wszystkie rejestry sterujące pojedynczym portem GPIO
■ Takiej struktury nie tworzymy
samodzielnie. Używamy wskaźnika
już zdefiniowanego w pliku nagłówkowym.
■ Przykładowo: aby zapisać wartość x do rejestru MODER, portu ‚A’:
■ Analogicznie dla WSZYSTKICH rejestrów mikrokontrolera.
Ustawienie określonych bitów rejestru
■ Na przykładzie rejestru MODER
■ Aby ustawić pin PA5 jako wyjście, należy ustawić bity nr 11 i 10 na wartość „01”
(po uruchomieniu mają wartość „11”)
■ Naiwne rozwiązanie:
Powoduje utratę wartości wszystkich pozostałych bitów rejestru, a powinny one pozostać w niezmienionym stanie.
Ustawienie określonych bitów rejestru
■ Poprawne rozwiązanie:
Zachowuje wartości wszystkich pozostałych bitów.
■ Wszystkie makrodefinicje (np. GPIO_MODER_MODE5_0) możemy odnaleźć w pliku nagłówkowym.
Ustawienie określonych bitów rejestru
■ Poprawne rozwiązanie (2):
■ Modyfikacja rejestru następuje w dwóch krokach:
– Najpierw wykasowanie bitów nr 11 i 10, a dopiero później ustawienie bitu nr 10
– W konsekwencji przechodzimy z MODE = „analog” do
MODE = „input”, a dopiero później MODE = „output”
– W tym konkretnym przypadku, taki stan pośredni nie wpływa na działanie urządzenia, ale w innych przypadkach może to mieć bardzo duże znaczenie !
Odczyt określonych bitów rejestru
■ Na przykładzie rejestru IDR
■ Aby odczytać wartość logiczną podaną na pin PC13, należy wyłuskać wartość bitu nr 13, rejestru IDR, struktury wskazywanej przez wskaźnik GPIOC
■ Należy zwrócić uwagę, że wszystkie pozostałe bity mogą mieć w danej chwili różne wartości logiczne
Odczyt określonych bitów rejestru
■ Poprawne rozwiązania:
■ W zależności od wybranego wariantu:
– W każdym przypadku możemy sprawdzić czy:
– W dwóch pierwszych przypadkach możemy sprawdzić czy:
– W ostatnim przypadku możemy wykonać test:
■ Podane przykłady nie wyczerpują wszystkich możliwości
Struktura programu
■ Program składa się bezargumentowej z funkcji main()
■ Funkcja nie może zakończyć swojego działania – Musi wykonywać nieskończoną pętlę
– Przed wejściem do nieskończonej pętli może wykonać jednorazowe czynności konfiguracyjne
Struktura programu Przykład
■ Konfiguracja:
– Konfiguracja zegara dla wybranych portów (,A’ oraz ,C’)
– Ustawienie pin`u PC13 jako wejście czytające stan przycisku – Ustawienie pin`u PA5 jako wyjście sterujące diodą LED
■ Pętla główna:
– Odczytanie stanu przycisku – Zapalenie diody, jeżeli
przycisk naciśnięty – Zgaszenie, jeżeli niewciśnięty
Konfiguracja zegara
■ System zegarowy zostanie omówiony w dalszej części wykładu
■ Najważniejsze informacje:
– Mikrokontroler jest domyślnie taktowany z częstotliwością 2.1MHz
– Po uruchomieniu wszystkie zegary układów peryferyjnych są odłączone (minimalizacja poboru mocy). Każdy układ peryferyjny jest synchronicznym układem cyfrowym, co oznacza, ze bez zegara jego działanie jest „zamrożone”
– Aby móc użyć danego układu peryferyjnego (w tym wypadku GPIOA oraz GPIOC) należy włączyć jego zegar
Konfiguracja GPIO – wyjście i wejście
■ Konfiguracja polega na ustawieniu WSZYSTKICH rejestrów danego układu peryferyjnego
■ Każdy rejestr ma określoną konkretną wartość domyślną. Jeżeli domyślna konfiguracja dla danego rejestru odpowiada docelowej, to nie trzeba jej aktualizować.
■ Konfiguracja PA5, jako wyjścia (pin nr 5, dla portu ‚A’):
– MODE = General purpose output mode – OSPEED = Very high speed
– Pozostałe rejestry bez zmian
■ Konfiguracja PC13, jako wejścia (pin nr 13, dla portu ‚C’):
– MODE = Input mode
Konfiguracja GPIO – MODE
Konfiguracja GPIO - OSPEED
Pętla główna
■ Rozwiązania równoważne
■ Różnica jedynie na poziomie języka C
■ Brak różnicy na poziomie kodu wykonywalnego
Pętla główna
■ Wyrażenia zrealizowane w trzech krokach:
– Odczyt zawartości rejestru
– Ustawienie odpowiednich bitów za pomocą podanej maski – Zapis do rejestru
■ Blok GPIO udostępnia rejestr BSRR (bit set reset register) pozwalający na realizację tych operacji w jednym kroku (atomowo)