Timery w mikrokontrolerach STM32F3

Podobne dokumenty
Porty GPIO w mikrokontrolerach STM32F3

Programowanie mikrokontrolerów 2.0

Programowanie mikrokontrolerów 2.0

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Metody obsługi zdarzeń

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

SYSTEM PRZERWAŃ ATmega 32

Przerwania, polling, timery - wykład 9

Instytut Teleinformatyki

Implementacja algorytmów DSP w mikrokontrolerach STM32F3

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Programowanie mikrokontrolerów 2.0

uniwersalnych 1. Klasyfikacja liczników w układach STM32F10x 2. Konfiguracja liczników do realizacji wybranych zadań 2.

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Sterowniki Urządzeń Mechatronicznych laboratorium. Ćw. 3: Timer v1.0

Mikroprocesor Operacje wejścia / wyjścia

Hardware mikrokontrolera X51

SYSTEM PRZERWA Ń MCS 51

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Programowanie mikrokontrolerów 2.0

Architektura Systemów Komputerowych. Bezpośredni dostęp do pamięci Realizacja zależności czasowych

2. Architektura mikrokontrolerów PIC16F8x... 13

Układy czasowo-licznikowe w systemach mikroprocesorowych

PRZERWANIA. 1. Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1

Układy czasowo-licznikowe w systemach mikroprocesorowych

LABORATORIUM. TIMERY w mikrokontrolerach MCS 51

PRZERWANIA. P1 - Procedura obslugi przerwania. Obsługa zdarzenia Z1 poprzez procedurę obsługi przerwania P1

Wstęp Architektura... 13

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

3. Sygnały zegarowe i ich konfiguracja, mechanizmy bezpieczeństwa... 47

Mikrokontrolery STM32

MARM. Laboratorium 1 system zegarów, porty wejścia/wyjścia. M. Suchenek

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

Technika Mikroprocesorowa

32 bity jak najprościej (3)

Programowanie mikrokontrolerów AVR z rodziny ATmega.

System mikroprocesorowy i peryferia. Dariusz Chaberski

1.2. Architektura rdzenia ARM Cortex-M3...16

Instytut Teleinformatyki

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Programowanie mikrokontrolerów 2.0

Układy czasowe / liczniki (timers/counters)

MIKROKONTROLERY I MIKROPROCESORY

Programowanie mikrokontrolerów 2.0

Część I - Sterownik przerwań 8259A i zegar/licznik 8253

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

LOW ENERGY TIMER, BURTC

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Programowany układ czasowy APSC

Instytut Teleinformatyki

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

PC 3 PC^ TIMER IN RESET PC5 TIMER OUT. c 3. L 5 c.* Cl* 10/H CE RO WR ALE ADO AD1 AD2 AD3 AD4 A05 A06 LTJ CO H 17 AD7 U C-"

Konfiguracja i programowanie Gamepad'a PlayStation2 na mikrokontrolerze STM32

Architektura mikrokontrolera MCS51

Mikrokontrolery z rdzeniami Cortex-M - STM32F401 w praktyce. Grzegorz Mazur Politechnika Warszawska Instytut Informatyki

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

Programowanie mikrokontrolerów. 3 stycznia 2008

Architektura mikrokontrolera MCS51

Instytut Teleinformatyki

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Przerwania w architekturze mikrokontrolera X51

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701. SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701.

Elastyczne systemy wytwarzania

Wstęp działanie i budowa nadajnika

MIKROPROCESORY architektura i programowanie

PROGRAMOWALNE SYSTEMY MECHATRONIKI

Magistrala I 2 C. Podstawy systemów mikroprocesorowych. Wykład nr 5 Interfejsy szeregowe c.d.

Ćwiczenia z S S jako Profinet-IO Controller. FAQ Marzec 2012

Mikrokontrolery Xmega (4)

LABORATORIUM UKŁADY STYKOWE ZL3AVR

STM32 dla użytkowników 8-bitowców (2)

Programowany układ czasowy

Komunikacja w mikrokontrolerach Laboratorium

Kurs Elektroniki. Część 5 - Mikrokontrolery. 1/26

Wbudowane układy peryferyjne cz. 2 Wykład 8

Urządzenia peryferyjne procesora ColdFire

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Mikroprocesory i mikrosterowniki Wydział Elektroniki Mikrosystemów i Fotoniki Politechniki Wrocławskiej Ćwiczenie nr 4

Programowanie mikrokontrolerów. 8 listopada 2007

TECHNIKA MIKROPROCESOROWA II

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Obsługa wyjść PWM w mikrokontrolerach Atmega16-32

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Temat nr 5. System czasu rzeczywistego bazujący na stałopozycyjnym procesorze sygnałowym. LABORATORIUM Procesory i komputery przemysłowe

Szkolenia specjalistyczne

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Ćwiczenie 7 Matryca RGB

Instytut Teleinformatyki

mikrokontrolerów PIC (2) Sterowanie za pomocą PWM

Wykład 2. Przegląd mikrokontrolerów 8-bit: -AVR -PIC

Transkrypt:

Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM Podstawy Programowania Mikroprocesorów i Procesorów DSP Timery w mikrokontrolerach STM32F3 Opracował: mgr inż. Andrzej Biedka 1

Komunikacja między blokami wewnętrznymi mikrokontrolera odbywa się za pośrednictwem magistral cyfrowych. System magistral w kontrolerach rodziny STM32 wykorzystuje kilka rodzajów magistral, różniących się prędkością pracy i wydajnością transmisji. Podstawowymi magistralami obsługującymi urządzenia peryferyjne są: AHB APB Advanced High-performance Bus Advanced Peripheral Bus Układy timerów mikrokontrolera STM32F303RE przyłączone są do dwóch różnych magistral APB. Timery 2, 3, 4 będące timerami ogólnego przeznaczenia (ang. general-purpose timers) oraz timery 6, 7 będące timerami podstawowymi (basic timers) przyłączone są do magistrali APB1, taktowanej z maksymalną częstotliwością 36 MHz. Timery 15, 16, 17 będące timerami ogólnego przeznaczenia (ang. general-purpose timers) oraz timery 1, 8, 20 będące timerami zaawansowanymi (advanced-control timers) przyłączone są do magistrali APB2, taktowanej z maksymalną częstotliwością 72 MHz. Timer 2 jest timerem 32-bitowym, pozostałe są 16-bitowe. Uproszczony schemat blokowy przyporządkowania magistral przedstawiony jest na rysunku 1 porównaj schemat blokowy mikrokontrolera zawarty w karcie katalogowej STM32F303RE.pdf dostępnej na stronie www.st.com. AHB1 APB1 APB1 (f max = 36 MHz) AHB Timer 2 (32-bit) Timer 3 Timer 4 Timer 6 Timer 7 AHB2 APB2 APB2 (f max = 72 MHz) Timer 15 Timer 16 Timer 17 Timer 1 Timer 8 Timer 20 Rys. 1. Schemat blokowy sterowania timerów mikrokontrolera STM32F303RE. Przed użyciem wybranego timera należy włączyć taktowanie właściwej magistrali oraz włączyć wybrany/wybrane timery. Poniższy schemat przedstawia ścieżkę źródeł sygnałów zegarowych niezbędnych do pracy timerów porównaj schemat blokowy bloku RCC dostępny w karcie STM32F303xB/C/D/E Reference Manual. 8MHz HSI RC HSI SYSCLK HCLK AHB bus max. 72MHz OSC_IN OSC_OUT /1...16 PLL x2...x16 PLL CLK AHB presk. /1...512 APB1 presk. /1...16 PPRE1 APB1 bus max. 36MHz PLL SRC PREDIV PLL MUL SW HPRE APB2 presk. /1...16 APB2 bus max. 72MHz 4-32 MHz HSE OSC HSE PPRE2 Rys. 2. Schemat blokowy źródeł taktowania magistral APB mikrokontrolera STM32F303RE. 2

Struktura i zasada pracy timerów w mikrokontrolerach STM32 jest zbliżona do rozwiązań stosowanych w mikrokontrolerach 8-bitowych. Jako przykładowy timer zostanie użyty Timer6 należący do grupy timerów podstawowych, wymagających najmniejszej ilości instrukcji konfiguracji. - zdarzenie - przerwanie Rys. 3. Schemat blokowy timera podstawowego (Timer6 i Timer7) mikrokontrolera STM32F3. Źródło: STM32F303 Reference Manual. Zgodnie ze schematami z rysunków 1 i 2 dla uruchomienia timera 6 konieczne będzie: odblokowanie taktowania magistrali APB1, ustawienie jej preskalera, (bity PPRE1), załadowanie rejestru preskalera timera 6, rejestr (PSC) jego rejestru automatycznego przeładowania, rejestr (ARR) odblokowanie timera6, co rozpocznie pracę bloku. Zdarzenie zrównania stanu licznika głównego (CNT counter) z zawartością rejestru automatycznego przeładowania ( Auto-reload register) spowoduje ustawienie flagi (bitu) UIF w rejestrze statusu timera 6. Jeśli program będzie wykorzystywał metodę pollingu, stan tego bitu powinien być sprawdzany w celu wykrycia chwili wystąpienia zdarzenia. Timery mikrokontrolerów STM32F3 mają do 24 rejestrów konfiguracyjnych - (plik stm32f303xe.h linie 665-697). Ilość rejestrów zależna jest od grupy, do której należy dany timer. Rejestry używane w podstawowych trybach pracy przedstawione są w tablicy 1. Lp Tablica 1. Rejestry konfiguracyjne timerów 6 i 7 mikrokontrolerów STM32F3 Nazwa rejestru Ilość bitów Opis rejestru Strona RefMan. 1 CR1 32 Rejestr sterujący 1 control register 1 677 2 CR2 32 Rejestr sterujący 2 control register 2 679 3 DIER 32 Rejestr masek przerwań i układu DMA 679 4 SR 32 Rejestr statusowy flag zdarzeń/przerwań 680 5 CNT 32 Główny licznik timera: timer2 32bity, pozostałe 16 bitów 680 6 PSC 16 Rejestr preskalera timera 681 7 ARR 16 Rejestr automatycznego przeładowania licznika głównego 681 3

Przykładowy program wykorzystujący timer nr 6 przedstawia listing: // Program generatora przebiegu symetrycznego, f = 1 Hz int main(void) RCC->AHBENR = RCC_AHBENR_GPIOAEN; // wlaczenie taktowania magstrali AHB GPIOA->MODER = GPIO_MODER_MODER5_0; // wybor trybu pracy linii 5 portu GPIOA // timer 6 RCC->APB1ENR = RCC_APB1ENR_TIM6EN; // wlaczenie taktowania bloku timera 6 TIM6->PSC = 2000; // preskaler timera 6 TIM6->ARR = 2000; // rejestr automatycznego przeladowania TIM6->CR1 = TIM_CR1_CEN; // wlaczenie zliczania impulsow wejsciowych timera 6 while ( 1 ) while(!(tim6-> SR & TIM_SR_UIF)); TIM6->SR &= ~TIM_SR_UIF; GPIOA->ODR ^= GPIO_ODR_5; //czekaj na ustawienie flagi zdarzenia //kasuj flage // neguj bit 5 GPIOA return 0; Zadania: 1. Zmodyfikować program wykorzystując timer 2, częstotliwość przebiegu wyjściowego = 2 Hz. 2. Zmodyfikować program wykorzystując timer 1, częstotliwość przebiegu wyjściowego = 3 Hz. 3. Wykorzystując dwa timery napisać program generowania impulsu o czasie 6 ms w okresie 1 s. Timer specjalny SysTick SysTick jest układem peryferyjnym rdzenia mikrokontrolera. Jest prostym timerem z licznikiem 24-bitowym, zliczającym w dół. Po osiągnięciu zera ponownie ładuje zaprogramowaną ilość impulsów i kontynuuje zliczanie. Może wygenerować przerwanie. SysTick nie posiada innych trybów pracy takich jak np.: PWM. Najczęstszym zastosowaniem tego timera jest generowanie tzw przerwania zegarowego w systemie. Do uruchomienia bloku przeznaczona jest funkcja biblioteczna: uint32_t SysTick_Config(uint32_t ticks) Argumentem funkcji jest ilość taktów systemu (SYSCLK) jakie upływają do chwili wyzerowania licznika. Przykładowy program wykorzystujący SysTick: int main(void) RCC->AHBENR = RCC_AHBENR_GPIOAEN; // wlaczenie taktowania magstrali AHB GPIOA->MODER = GPIO_MODER_MODER5_0; // wybor trybu pracy linii 5 portu GPIOA SysTick_Config(8000000); // ustawianie ilosci tickow zegara systemowego while ( 1 ); return 0; void SysTick_Handler(void) // funkcja obslugujaca zdarzenie GPIOA->ODR^= GPIO_ODR_5; // negacja bitu sterujacego LED 4

System przerwań System przerwań mikrokontrolerów STM32Fx oferuje więcej możliwości niż poznany wcześniej system stosowany w rodzinie AVR, co implikuje większą komplikację struktury wewnętrznej bloku przerwań rodziny STM32Fx. Blok obsługi przerwań nosi nazwę Nested Vectored Interrupt Controller NVIC, sterownik zagnieżdżonych przerwań wektoryzowanych. Podstawowe właściwości NVIC są następujące: ścisłe powiązanie NVIC z rdzeniem mikrokontrolera zapewnia małe opóźnienia obsługi przerwań wektory przerwań przekazywane są z tablicy bezpośrednio do rdzenia w obsłudze przerwania stan procesora jest zapamiętywany i odtwarzany automatycznie mikrokontroler STM32F3x obsługuje 74 źródeł przerwań pochodzących od urządzeń peryferyjnych mikrokontroler STM32F3x obsługuje 16 źródeł przerwań pochodzących zdarzeń rdzenia możliwa jest zmiana priorytetu przerwań 16 poziomów priorytetu nie jest używana flaga globalnego zezwolenia na przrerwanie W zakresie ćwiczeń przedmiotu stosowane będą podstawowe, ustawiane domyślnie, funkcje układu przerwań. Odblokowanie danego źródła przerwania dokonywane jest funkcją o konstrukcji: NVIC_EnableIRQ(TIM2_IRQn); Nazwa funkcji Nazwa wektora przerwania dla timera 2 jednakowa dla wszystkich (plik stm32f303xe.h linie 86-169) źródeł przerwań Jeśli zachodzi potrzeba zablokowania żądań pochodzących z danego źródła przerwania należy wywołać funkcję: NVIC_DisableIRQ(TIM2_IRQn); Czynności wchodzące w zakres obsługi danego przerwania należy umieścić w funkcji: void TIM2_IRQHandler(void) // obsluga przerwania timera 2 W odróżnieniu od rodziny AVR mikrokontrolery STM32Fx generują wektor przerwania przypisany do typu danego zasobu, np. timera. Jak wiadomo, dane urządzenie peryferyjne mikrokontrolera może generować przerwania z różnych przyczyn. Pozostając przy przykładzie timera przerwanie może być efektem przepełnienia licznika głównego timera, zrównania stanu licznika głównego z rejestrem porównawczym lub innymi zdarzeniami w timerze. Zatem w funkcji obsługi przerwania należy przeprowadzić analizę potencjalnych źródeł zgłoszonego przerwania i wykonać treść obsługi właściwą dla wykrytego źródła. Ogólna postać takiej funkcji będzie następująca: void TIM2_IRQHandler(void) if(tim2->sr & IntFlag_1)obsluga_1 // jeśli zglasza flaga 1 // wykonaj obsluge nr 1 if(tim2->sr & IntFlag_2)obsluga_2 // jeśli zglasza flaga 2 // wykonaj obsluge nr 2 if(tim2->sr & IntFlag_n)obsluga_n // jeśli zglasza flaga n // wykonaj obsluge nr n Przykładowy program generatora przebiegu o częstotliwości 2Hz przedstawiony jest na poniższym listingu: 5

int main(void) // program generatora przebiegu symetrycznego, f = 2Hz // GPIOA_5 RCC->AHBENR = RCC_AHBENR_GPIOAEN; GPIOA->MODER = GPIO_MODER_MODER5_0; // RM 237 // timer 2 RCC->CFGR = RCC_CFGR_PPRE1_DIV1; // preskaler magistrali APB1 RCC->APB1ENR = RCC_APB1ENR_TIM2EN; // odblokowanie zegara magistrali APB1 TIM2->PSC = 2000; // preskaler timera = 2000 TIM2->ARR = 1000; // rejestr przepelnienia = 1000 TIM2->CR1 = TIM_CR1_CEN; // start licznika TIM2->DIER = TIM_DIER_UIE; // odblokowanie maski przerwania od przepelnienia timera NVIC_EnableIRQ(TIM2_IRQn); // odblokowanie przerwania w sterowniku NVIC while(1); return 0; void TIM2_IRQHandler(void) if(tim2->sr & TIM_SR_UIF) // sprawdzenie wewnetrznego zrodla przerwania TIM2->SR &= ~TIM_SR_UIF; // skasuj flage zgloszenia przerwania GPIOA->ODR ^= GPIO_ODR_5; // algorytm przerwania neguj stan LED 6