Precyzyjne opóźnienia w połączeniu z trybami oszczędzania energii w STM32, część 2

W pierwszej części artykułu przedstawiono funkcje realizujące precyzyjne odmierzanie opóźnień w połączeniu z trybami oszczędzania energii dla mikrokontrolerów STM32 z rdzeniem Cortex-M3. W części drugiej omówiono konfigurowanie sygnałów zegarowych, przykładowy program testowy i układ, na którym wykonano testy. Zamieszczono też wyniki pomiarów prądu zasilania w poszczególnych trybach obniżonego poboru energii oraz rzeczywistych czasów opóźnień.

Dystrybucja sygnałów zegarowych w STM32

Aby wykorzystać opisane w pierwszej części artykułu funkcje opóźniające, musimy jeszcze skonfigurować oscylator kwarcowy mikrokontrolera oraz sygnały taktujące rdzeń i peryferie.

Rys. 1. Budowa systemu taktującego w STM32F107

Rys. 1. Budowa systemu taktującego w STM32F107

Dystrybucję sygnałów zegarowych w STM32F107 w uproszczony sposób przedstawiono na rysunku 1. Rdzeń jest taktowany sygnałem HCLK, którego maksymalna częstotliwość wynosi 72 MHz. Peryferie są taktowane sygnałami PCLK1 i PCLK2 otrzymywanymi z HCLK za pomocą dzielników wstępnych (ang. prescalers) APB1 i APB2. Sygnały PCLK1 i PCLK2 mogą mieć maksymalne częstotliwości odpowiednio 36 i 72 MHz, dlatego ustawiamy wartości dzielników APB1 i APB2 odpowiednio na 2 i 1. Częstotliwość taktowania liczników TIM2, TIM3, TIM4 i TIM5 zależy od współczynnika podziału APB1. Jeśli ma on wartość 1, to liczniki te są taktowane sygnałem PCLK1 o tej samej częstotliwości co HCLK. Jeśli natomiast dzielnik APB1 ma wartość różną od 1, to PCLK1 ma częstotliwość APB1 razy mniejszą niż HCLK, ale omawiane liczniki są taktowane sygnałem o częstotliwości dwa razy większej niż PCLK1. W naszym przypadku APB1 ma wartość 2, zatem liczniki te są taktowane z częstotliwością HCLK.

List. 4. Plik nagłówkowy clock.h

Sygnały taktujące są konfigurowane za pomocą funkcji ClockConfigure, której argumentem jest częstotliwość HCLK w MHz, jaką chcemy ustawić. Dopuszczalne wartości argumentu to 12, 14, 16, 18, 24, 28, 32, 36, 48, 56, 64, 72 MHz. Funkcja ta zwraca zero, gdy konfiguracja powiedzie się lub wartość ujemną, gdy podano błędną wartość argumentu, gdy nie uda się wystartować oscylatora kwarcowego HSE lub któraś z PLL nie zsynchronizuje się. Odpowiednia deklaracja jest umieszczona na listingu 4. Znajduje się tam też deklaracja funkcji AllPinsDisable, która konfiguruje wszystkie porty wejścia-wyjścia, tak aby zminimalizować pobór prądu przez mikrokontroler. Implementacja zamieszczona jest na listingu 5.

List. 5. Implementacja konfiguracji sygnałów taktujących, umieszczona w pliku clock.c

O autorze