Funkcje API w obsłudze GPIO

Producent mikrokontrolerów STM32 zaleca, aby wszystkie nieużywane wyprowadzenia były skonfigurowane jako analogowe wejścia, czego konsekwencją jest mniejsze zużycie energii oraz większa odporność na EMI. O ile w mniejszych jednostkach 8-bitowych miało to mniejsze znaczenie, to należy pamiętać, że tutaj mikrokontroler pracuje z dużo większą częstotliwością, ponadto znaczna część rodziny STM32 posiada relatywnie dużą liczbę wyprowadzeń, zatem takie ich ustawienie ma istotne znaczenie dla optymalizacji pracy systemu.

Funkcje alternatywne i „remapping”
W niektórych przypadkach fizyczne rozmieszczenie elementów na docelowej płytce drukowanej nie pozwala na podłączenie urządzenia, bądź elementu zewnętrznego do wyprowadzenia, które jest domyślnie powiązane z interesującą projektanta alternatywną jego funkcją. W takich sytuacjach na ratunek przychodzi możliwość „przemapowania” (remapping) GPIO. Jeśli więc przypisanie danej funkcji alternatywnej, np. portu USART nie odpowiada potrzebom projektowanej aplikacji, to można ową funkcję przepisać do innego, bardziej odpowiedniego dla aktualnego zastosowania wyprowadzenia. Takie zabiegi mogą być przeprowadzane tylko dla ściśle określonych wyprowadzeń, co jest szczegółowo podane w nocie katalogowej każdego mikrokontrolera z rodziny STM32.

List. 2. Przykładowe przemapowanie pinów związanych funkcjonalnie z Timerem 3

 

Tab. 1. Możliwe sposoby przypisania linii Timera 3 do GPIO

Funkcja Domyślnie Częściowy remapping Całkowity remapping
TIM3_CH1 PA6 PB4 PC6
TIM3_CH2 PA7 PB5 PC7
TIM3_CH3 PB0   PC8
TIM3_CH4 PB1   PC9

Przykłady możliwości zmiany funkcji różnych pinów dla czterech kanałów Timera 3 są przedstawione w tab. 1, natomiast jedno z możliwych rozwiązań programowych przedstawiono na list. 2. Do zmiany przypisania domyślnego funkcji alternatywnej służy funkcja GPIO_PinRemapConfig. Informacje, które należy przekazać funkcji to określenie interesujących nas peryferiów, podanie czy przemapowanie ma być tylko częściowe, czy całkowite oraz czy włączamy, czy wyłączamy remapping. Przedstawiony fragment kodu sprawi, że Timer 3 będzie sterował wyjściami od GPIO_Pin_6 do GPIO_Pin_9. Należy oczywiście pamiętać o włączeniu taktowania dla funkcji alternatywnej i samego portu (tutaj będzie to port GPIOC) w bloku konfiguracji sygnałów zegarowych i zerowania – funkcja RCC_Conf.

O autorze