1 Wprowadzenie 1.1 Taktowanie mikrokontrolera

Transkrypt

1 Wprowadzenie 1.1 Taktowanie mikrokontrolera
Białostocka
Politechnika
WYDZIAŁ ELEKTRYCZNY
KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ
Instrukcja do zajęć laboratoryjnych
Temat ćwiczenia: Sygnały zegarowe. Obsługa GPIO i przetwornika ADC
Numer ćwiczenia: 2
Laboratorium z przedmiotu:
Systemy mikroprocesorowe w zastosowaniach przemysłowych i sieciowych
KOD: TS1C6
Opracowali:
dr inż. Maciej Szumski
dr inż. Krzysztof Konopko
2017
1
Wprowadzenie
1.1 Taktowanie mikrokontrolera - sygnały zegarowe
Każdy synchroniczny system cyfrowy wymaga do poprawnej pracy odpowiednich
sygnałów zegarowych. W najprostszym przypadku cały system może być taktowany z
jednego źródła z tą samą częstotliwością. Jednak wraz ze wzrostem poziomu skomplikowania
wymagane jest generowanie sygnałów zegarowych o różnych częstotliwościach.
Mikrokontroler zastosowany w zestawie ZL29ARM [2] wyposażony jest w wiele peryferii
komunikacyjnych, m. in. Ethernet, USB OTG, I2S itd. Wymusza to jednoczesne generowanie
wielu przebiegów zegarowych o różnych częstotliwościach. Obsługa interfejsu Ethernet i
USB wymaga dwóch różnych sygnałów zegarowych, odpowiednio 25 MHz i 48 MHz.
Dodatkowo jeśli mikrokontroler ma wykorzystywać pełnię swoich możliwości, to potrzebny
jest trzeci przebieg o częstotliwości 72 MHz.
Rys. 1.1. Schemat układu taktowania procesora i peryferii [RM0008]
Za dostarczenie do wszystkich układów odpowiedniego sygnału zegarowego odpowiada
moduł Reset and Clock Control (RCC). Źródłem sygnałów taktujących mogą być: Low-Speed
Internal (LSI) – wewnętrzny oscylator RC 40kHz, High-Speed Internal (HSI) – wewnętrzny
oscylator RC 8MHz, Low-Speed External (LSE) – zewnętrzny rezonator kwarcowy
32.768kHz i High-Speed External (HSE) – zewnętrzny rezonator kwarcowy (w zestawie
ZL29ARM [2] 10 MHz). W celu uzyskania odpowiednich sygnałów taktujących
mikrokontroler STM32F107 ma wbudowane trzy układy PLL, które umożliwiają mnożenie
wejściowego sygnału przez wiele współczynników. Do dyspozycji są również układy
dzielenia sygnału oraz liczne multipleksery sygnałów zegarowych. Schemat bloku RCC
(Reset and Clock Control) przedstawiono na rysunku 1.1.
Poniżej została przedstawiona przykładowa funkcja konfigurująca zegary dostosowane do
obsługi peryferii komunikacyjnych Ethernet i USB oraz ustawiająca główną częstotliwość
taktowania mikrokontrolera na wartość równą 72 MHz.
bool RCC_Config(void)
{
u16 StartUpCounter=0;
uint32_t HSEStatus;
ErrorStatus HSEStartUpStatus;
/* reset ustawień RCC */
RCC_DeInit ();
/* Wlacz HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Odczekaj, aż HSE się uruchomi lub zostanie przekroczony dozwolony czas*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS){
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* zwłoka Flasha: 2 takty */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PREDIV2: PREDIV2CLK = HSE / 2 = 5 MHz */
RCC_PREDIV2Config(RCC_PREDIV2_Div2 );
/* PLL3: PLL3CLK = (HSE / 2) * 10 = 50 MHz */
RCC_PLL3Config(RCC_PLL3Mul_10);
/* Włacz PLL3 */
RCC_PLL3Cmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET);
/* MCO: MCO_OUT = PLL3 / 2 = 25 MHz*/
RCC_MCOConfig(RCC_MCO_PLL3CLK_Div2);
/* PLL2: PLL2CLK = (HSE / 2) * 8 = 40 MHz */
RCC_PLL2Config(RCC_PLL2Mul_8);
RCC_PLL2Cmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET);
/* PREDIV1: PREDIV1CLK = PLL2 / 5 = 8 MHz */
RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2,RCC_PREDIV1_Div5);
/* PLL: PLLCLK = PREDIV1 * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
/* Włacz PLL */
RCC_PLLCmd (ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* PLL zrodlem SYSCLK */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08);
/* Zrodlo taktowania Ethernet dla ETH_MII - MCO = PLL3CLK / 2 = 25 MHz*/
RCC_MCOConfig(RCC_MCO_PLL3CLK_Div2);
/* Zrodlo taktowania USB */
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
/* Właczenie taktowania ETHERNET i USB */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx
|RCC_AHBPeriph_ETH_MAC_Rx | RCC_AHBPeriph_OTG_FS,ENABLE);
/* Włacznie taktowania GPIO */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |RCC_APB2Periph_GPIOE |
RCC_APB2Periph_AFIO, ENABLE);
return true;
}
return false;
}
1.2 Obsługa peryferii dołączonych do portów mikrokontrolera
Joystick
Zestaw ZL29ARM wyposażono w 5-pozycyjny joystick. Każdy ze styków joysticka ma
rezystor podciągający do napięcia zasilania. Styki joysticka dołączono do linii 5…9 portu PC.
Rys. 1.2. Schemat dołączenia styków joysticka do linii 5…9 portu PC
Wyświetlacz LCD
Zestaw ZL29ARM wyposażono w złącze umożliwiające dołączenie do zestawu
wyświetlacza LCD 2x16 znaków (LCD1602) z wbudowanym sterownikiem Hitachi
HD44780. Na rysunku 1.3 pokazano sposób dołączenia linii sterujących wyświetlaczem do
portu PE mikrokontrolera.
Rys. 1.3. Schemat dołączenia linii sterujących wyświetlaczem LCD do portu PE mikrokontrolera
HD44780 jest od wielu lat jednym z najpopularniejszych sterowników wyświetlaczy
alfanumerycznych. Sterownik HD44780 posiada dwa rodzaje pamięci: pamięć generatora
znaków (CGROM) oraz pamięć danych (DD RAM). Pamięć generatora znaków zawiera
graficzną postać znaków wyświetlanych na wyświetlaczu. Oprócz znaków zdefiniowanych na
stałe przez producenta sterownika do dyspozycji użytkownika pozostaje 8-znakowa pamięć
RAM, w której można zdefiniować własne znaki (np. polskie znaki diakrytyczne). Komendy
od danych odróżniane są na podstawie stanu linii RS (0 - komendy; 1 - dane). Natomiast
kierunek transmisji ustala stan linii RW (1 - odczyt, 0 - zapis). W Tabeli 1.1 znajduje się
zestawienie rozkazów kontrolera:
Tab. 1.1. Zestawienie rozkazów kontrolera HD44780
Instrukcja
Clear Display
Return Home
Entry Mode Set
Display On/Off Control
Cursor or Display Shift
Function Set
Set CGRAM Address
Set DDRAM Address
Read Busy Flag and
Address
Write Data to CG or
DDRAM
Read Data from CG or
DDRAM
DATA6
0
0
0
0
0
0
1
DATA5
0
0
0
0
0
1
Stan wejść
DATA4 DATA3 DATA2 DATA1
0
0
0
0
0
0
0
1
0
0
1
I
0
1
D
C
1
S
R
X
D
N
F
X
Adres pamięci CG ROM
Adres pamięci DD RAM
RS
0
0
0
0
0
0
0
0
RW
0
0
0
0
0
0
0
0
DATA7
0
0
0
0
0
0
0
1
0
1
B
1
0
Zapisywany bajt danych
1
1
Odczytywany bajt danych
DATA0
1
X
S
B
X
X
Adres pamięci DD RAM
Krótki opis poszczególnych rozkazów:
Clear Display - (RS = 0, RW = 0, dane = 00000001) - instrukcja powoduje wyczyszczenie
wyświetlacza poprzez wypełnienie go spacjami, ustawienie trybu zapisu danych od pozycji w
lewym górnym rogu wyświetlacza oraz wyłączenie trybu przesuwania okna
Return Home - (RS - 0, RW = 0, dane = 0000001x) - instrukcja powoduje ustawienie kursora
na pozycji pierwszego znaku w pierwszej linii
Entry Mode Set - (RS = 0; RW = 0, dane = 000001IS) - określenie trybu pracy kursora/okna
wyświetlacza:
 dla S = 1 po zapisaniu znaku do wyświetlacza kursor nie zmienia położenia, natomiast
przesuwa się cała zawartość wyświetlacza
 dla S = 0 po zapisaniu znaku do wyświetlacza kursor zmienia położenie, a
przesuwanie okna jest wyłączone
 dla I = 1 kursor lub okno wyświetlacza przesuwa się w prawo (inkrementacja adresu
znaku)
 dla I = 0 kursor lub okno wyświetlacza przesuwa się w lewo (dekrementacja adresu
znaku)
Display On/Off Control - (RS = 0, RW = 0, dane = 00001DCB)
 dla D = 1 - włączenie wyświetlacza
 dla D = 0 - wyłączenie wyświetlacza
 dla C = 1 - włączenie kursora
 dla C = 0 - wyłączenie kursora
 dla B = 1 - włączenie migania kursora
 dla B = 0 - wyłączenie migania kursora
Cursor or Display Shift - (RS = 0, RW = 0, dane = 0001SRxx)
 dla S = 1 - przesuwana jest zawartość okna
 dla S = 0 - przesuwany jest kursor
 dla R = 1 - kierunek przesuwu w prawo
 dla R = 0 - kierunek przesuwu w lewo
Function Set (RS= 0, RW = 0, dane = 001DNFxx)
 dla D = 1 - interfejs 8-bitowy
 dla D = 0 - interfejs 4-bitowy
 dla N = 1 - wyświetlacz dwuwierszowy
 dla N = 0 - wyświetlacz jednowierszowy
 dla F = 1 - matryca znaków 5*10 punktów
 dla F = 0 - matryca znaków 5*7punktów
Set CGRAM Address - (RS= 0, RW = 0, dane = 01AAALLL) - ustawia adres pamięci
generatora znaków. AAA - 3-bitowy adres znaku, LLL - 3-bitowy numer linii składającej się
na graficzne odwzorowanie znaku.
Set DDRAM Address - (RS = 0, RW = 0, dane = 1AAAAAAA) - ustawia adres pamięci
wyświetlacza, pod który nastąpi zapis (bądź odczyt) danych.
Read Busy Flag and Address - (RS = 0, RW = 1, dane = BAAAAAAA) - odczyt flagi
zajętości i adresu pamięci wyświetlacza. B - flaga zajętości wyświetlacza, AAAAAAA - 7bitowy adres pamięci. Jezeli B = 1 to sterownik HD44780 jest w trakcie wewnętrznych
operacji i jedyną dozwoloną czynnością są kolejne odczyty Read Busy Flagand Address.
Write Data to CG or DDRAM - (RS = 1, RW = 0, dane = zapisywany bajt danych) - zapis
danych do pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę
CG RAM set).
Read Data from CG or DDRAM - (RS = 1, RW= 1, dane = odczytywany bajt danych) odczyt danych z pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano
komendę CG RAM set).
Wymagania czasowe w operacji zapisu i odczytu danych z układu LCD1602 przestawiono na
rysunkach 1.4 i 1.5
Rys. 1.4. Wymagania czasowe w operacji zapisu do LCD1602.
Rys. 1.5. Wymagania czasowe w operacji odczytu z LCD1602.
1.3 Odczyt i wykorzystanie wejścia analogowego
Przetwornik analogowo – cyfrowy (analog-to-digital converter) ADC zamienia
stosunek napięcia mierzonego do napięcia odniesienia Uref (reference voltage) na liczbę
całkowita. Kluczowymi parametrami określającymi przetwornik ADC są:



Czas przetwarzania, czyli maksymalny, niezbędny czas do wykonania jednego
przetworzenia.
Rozdzielczość (resolution), czyli liczba bitów na wyjściu przetwornika ADC. Można
także określić rozdzielczość napięciową. Jeżeli przetwornik jest 12-bitowy, to dzieli
cały zakres napięcia na 212 = 4096 równych części. Jeżeli ponadto Uref = 3.3V , to
rozdzielczość napięciowa jest równa 3.3V/4096 = 0.80566mV.
Energia rozpraszana, czyli tracona w czasie przetwarzania. Parametr szczególnie
istotny w urządzeniach zasilanych bateryjnie, jak telefony komórkowe.
W mikrokontrolerach ARM Cortex-M wbudowane są przetworniki 12–bitowe z sukcesywną
aproksymacją (successive-approximation) SAR. Maksymalna częstotliwość taktowania to
14 MHz. Rysunek 1.6 zawiera schemat przetwornika ADC.
Rys. 1.6. Schemat przetwornika analogowo - cyfrowego ADC
Zestaw ZL29ARM wyposażono w potencjometr P2, który może zostać wykorzystany do
podawania napięcia z zakresu 0...3,3 V na wejście przetwornika analogowo-cyfrowego
mikrokontrolera STM32. Środkowe wyprowadzenie potencjometru dołączono do linii PB0.
Rys. 1.7. Schemat dołączenia potencjometru do przetwornika analogowo - cyfrowego ADC
2
Cel i zakres ćwiczenia
Celem ćwiczenia jest ugruntowanie wiedzy studentów oraz nabycie przez nich
umiejętności z zakresu podstaw programowania mikroprocesorów. W ramach zajęć studenci
nabywają umiejętności z zakresu: konfiguracji moduł RCC (Reset and Clock Control)
dostarczającego sygnałów zegarowych, obsługi portów GPIO w tym odczytu położenia
kontrolera sterującego, wizualizacji stanu pracy mikrokontrolera za pomocą diod LED i
wyświetlacza LCD oraz zastosowania przetwornika analogowo-cyfrowego.
Studenci zdobywają umiejętność tworzenia, uruchamiania i testowania oprogramowania
mikrokontrolerów
na
przykładzie
zestawu
ZL29ARM
z
mikrokontrolerem
STM32F107VCT6. Realizowanymi zadaniami w bieżącym ćwiczeniu jest obsługa
podstawowych peryferii dostępnych w stosowanym, na ćwiczeniach laboratoryjnych,
zestawie.
3
Zagadnienia do opracowania przed
przystąpieniem do zajęć
Przed przystąpieniem do zajęć należy opracować następujące zagadnienia:
 podstawowe parametry zestawu ZL29ARM [2] w tym rodzaje i sposób dołączania
układów peryferyjnych,
 konfiguracja modułu RCC Reset and Clock Control [4],
 obsługa w języku C portów GPIO [1 (rozdz. 4.10)],
 sposób komunikacji oraz obsługę w języku C wyświetlacza LCD (LCD1602),
 obsługa w języku C dostępnego w zestawie przetwornika analogowo-cyfrowego [1
(rozdz. 16)].
4
Przebieg ćwiczenia
Ćwiczenia laboratoryjne prowadzone są w oparciu o zestaw ZL29ARM [2] umożliwiający
realizację aplikacji dla mikrokontrolera STM32F107 (rodzina Connectivity Line).
Obsługa portów GPIO [1 (rozdz. 4.10)]:
a) zrealizować procedurę umożliwiającą odczyt stanu joysticka i sygnalizację jego
położenia za pomocą diod LED (sposób wizualizacji określa prowadzący)
(przykładowy program można znaleźć w [1 (rozdz. 4.11)]).
Obsługa modułu RCC:
b) z zastosowaniem przedstawionej w instrukcji konfiguracji modułu RCC [4] oraz
prostej funkcji Delay() [1 (rozdz. 4.11.4)], napisać program zapalający w określonym
czasie diody LED (sposób wizualizacji określa prowadzący).
Obsługa wyświetlacza [1 (rozdz. 9)]:
c) zrealizować procedurę wizualizującą na wyświetlaczu LCD stan joysticka (sposób
wizualizacji określa prowadzący).
Dodatkowe zadania przydzielone grupie przez prowadzącego:
d) wykonać zestaw zadań przydzielony grupie przez prowadzącego. Realizacja zadań
wymaga znajomości obsługi przetwornika analogowo-cyfrowego [1 (rozdz. 16)],
portów GPIO oraz sposobu obsługi wyświetlacza LCD.
Każde zrealizowane zadanie należy przedstawić prowadzącemu.
5
Opracowanie sprawozdania
Przygotowane sprawozdanie z zajęć powinno zawierać opis przebiegu ćwiczenia
laboratoryjnego w tym kody źródłowe procedur wraz z opisem i analizą działania.
Sprawozdanie powinno też zawierać wnioski dotyczące realizacji poszczególnych punktów
ćwiczenia laboratoryjnego.
6
Wymagania BHP
W trakcie realizacji programu ćwiczenia należy przestrzegać zasad omówionych we
wstępie do ćwiczeń, zawartych w: „Regulaminie porządkowym w laboratorium” oraz
w „Instrukcji obsługi urządzeń elektronicznych znajdujących się w laboratorium z
uwzględnieniem przepisów BHP”. Regulamin i instrukcja są dostępne w
pomieszczeniu laboratoryjnym w widocznym miejscu.
7
1.
2.
3.
4.
5.
6.
7.
8.
9.
Literatura
Maciej Szumski - „Systemy Mikroprocesorowe w Sterowaniu. Część I.
ARM Cortex-M3”, PLUM, 2016
Dokumentacja zestawu ZL29ARM: http://kamami.pl/dl/zl29arm.pdf
STM32F107VC Datasheet: http://www.st.com/resource/en/datasheet/stm32f107vc.pdf,
2015
RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and
STM32F107xx advanced ARM®-based 32-bit MCUs:
http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2015
PM0075: STM32F10xxx Flash memory microcontrollers:
http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2012
PM0056: STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual:
http://www.st.com/resource/en/programming_manual/cd00228163.pdf, 2013
STM32F105xx and STM32F107xx revision Z connectivity line device limitations:
http://www.st.com/resource/en/errata_sheet/cd00238166.pdf, 2013
Krzysztof Paprocki, „Mikrokontrolery STM32 w praktyce”, BTC, 2011.
Marek Galewski, „STM 32 : aplikacje i ćwiczenia w języku C”, BTC, 2011.

Podobne dokumenty