1. Rdzeń Cortex-M3 .. 9
1.1. Firma ARM i jej wyroby 10
1.2. Rodzina rdzeni Cortex 12
1.3. Ogólne spojrzenie na architekturę rdzenia Cortex-M3 14
1.4. Rejestry podstawowe 17
1.5. Przestrzeń adresowa 17
1.5.1. Bit-band, czyli obszary o dostępie atomowym 18
1.6. Sterownik przerwań NVIC 20
1.7. Lista rozkazów Thumb-2 22
2. Narzędzia i oprogramowanie 23
2.1. Zestaw ewaluacyjny ZL27ARM 24
2.2. Zasilanie zestawu ewaluacyjnego 26
2.3. Rodzina mikrokontrolerów STM32 27
2.4. Oprogramowanie narzędziowe 29
2.5. Biblioteka API - STM32F10x Standard Peripherals Library v3.4.0. 37
2.5.1. CMSIS: Cortex Microcontroller Software Interface Standard 38
2.5.2. Struktura biblioteki STM32F10x Standard Peripherals Library 39
2.5.3. Migracja ze starszej wersji biblioteki STM32F10x firmware library 44
2.6. Konfiguracja urządzeń peryferyjnych za pomocą Standard Peripherals Library 46
2.7. Programowanie pamięci Flash mikrokontrolera 46
2.8. Debugowanie 48
2.9. Rdzeń Cortex-M3 i debugowanie 48
2.9.1. Praca ciągła, krokowa, zatrzymywanie mikrokontrolera 50
2.9.2. Pułapki (breakpoints) 51
3. Sygnały zegarowe i ich konfiguracja, mechanizmy bezpieczeństwa 53
3.1. Sygnały zegarowe 54
3.1.1. Zewnętrzny generator szybkich przebiegów HSE 54
3.1.2. Wewnętrzny generator szybkich przebiegów HSI 55
3.1.3. Zewnętrzny generator wolnych przebiegów LSE 56
3.1.4. Wewnętrzny generator wolnych przebiegów LSI 56
3.1.5. Wyprowadzenie sygnału zegarowego na zewnątrz 56
3.2. Konfigurowanie mikrokontrolera do pracy 57
3.3. Zerowanie mikrokontrolera 60
3.4. Mechanizmy zabezpieczeń 62
3.4.1. System nadzoru sygnału taktującego - Clock Security System 62
3.4.2. Rejestry chronione przed utratą danych po zaniku napięcia zasilającego – Backup Domain 62
3.4.3. Zegar czasu rzeczywistego RTC 65
3.4.4. Watchdog niezależny IWDG 68
3.4.5. Watchdog okienkowy WWDG 71
3.4.6. Obliczenie parametrów okna WWDG 73
3.4.7. Przerwanie EW 74
4. Obsługa portów I/O 75
4.1. Budowa i obsługa portów wejścia/wyjścia 76
4.2. Inne funkcje zmiany stanu wyprowadzeń 81
4.3. Funkcje odczytu stanu wyprowadzeń 82
4.4. Wstawki asemblerowe 83
4.5. Blokowanie portów wejścia/wyjścia 85
4.6. Funkcje alternatywne i remapping 87
4.7. Dodatkowe uwagi dotyczące portówwejścia/wyjścia 88
4.8. Sterowanie alfanumerycznego wyświetlacza LCD 88
4.8.1. Zapis bajtu do sterownika wyświetlacza 89
4.8.2. Odczyt bajtu ze sterownika wyświetlacza 90
4.8.3. Budowa prostego menu 91
5. Przerwania i kontroler NVIC 93
5.1. Przerwania i zdarzenia 94
5.2. System priorytetów 94
5.3. Pozycja tablicy wektorów przerwań w przestrzeni adresowej 96
5.4. Przerwanie zewnętrzne 96
5.4.1. Konfiguracja przerwań zewnętrznych 98
5.5. Kontroler przerwań NVIC 101
5.5.1. Sprawdzanie wywłaszczeń przerwań 101
5.5.2. Blokowanie przerwań 103
5.5.3. Kolejkowanie przerwań tail-chaining 104
5.5.4. Obsługa późniejszego przerwania late arrival 105
5.5.5. Przerywanie operacji zdejmowania ze stosu (POP) 106
5.5.6. Programowe wymuszenie przerwania 107
5.5.7. Programowe zerowanie 108
5.5.8. Informacje o rdzeniu 108
5.6. Timer SysTick 109
6. Timery i DMA ... 113
6.1. Budowa i działanie timera TIM1 114
6.1.2. Tryby zliczania 115
6.1.3. Licznik powtarzania - repetition counter 116
6.1.4. Przykładowa konfiguracja TIM1 - generacja czterech przebiegów o różnych częstotliwościach 116
6.2. Generowanie sygnału PWM - timer TIM3 120
6.3. Pomiar okresu sygnału wejściowego - timer TIM2 122
6.3.1. Zliczanie impulsów wejściowych 124
6.4. Pomiar parametrów wejściowego sygnału PWM 126
6.5. Synchronizacja i kaskadowe łączenie timerów 130
6.6. Obsługa przycisków 132
6.7. Kontroler DMA 135
6.7.1. Priorytety obsługi kanałów DMA 137
6.7.2. Konfiguracja kontrolera DMA 137
6.8. Współpraca timerów z kontrolerem DMA 139
7. Przetworniki A/C 143
7.1. Budowa przetwornika analogowo-cyfrowego 144
7.1.1. Taktowanie przetwornika A/C 146
7.1.2. Praca pojedynczego kanału w trybie ciągłym 146
7.1.3. Kalibracja przetworników 149
7.1.4. Pojedynczy kanał w trybie pojedynczego pomiaru 149
7.1.5. Kilka kanałów w trybie ciągłym z wykorzystaniem DMA - programowany czas próbkowania 149
7.2. Konfiguracja DMA do pracy z przetwornikiem A/C 153
7.3. Obsługa przerwań od przetwornika A/C 154
7.4. Wyzwalanie przetwornika A/C 155
7.4.1. Wyzwalanie za pomocą timera TIM1 155
7.4.2. Wyzwalanie za pomocą przerwania zewnętrznego EXTI_11 157
7.4.3. Nieciągły tryb pracy przetwornika A/C 159
7.5. Jednoczesna praca A/C1 i A/C2 (dual A/C mode) 160
7.6. Eliminacja błędów i niedokładnościprzetwarzania A/C 161
7.6.1. Programowe minimalizowanie błędów 162
7.6.2. Jakość napięcia zasilania 163
7.6.3. Dopasowanie napięcia do zakresu pomiarowego 163
7.7. Cyfrowe przetwarzanie sygnałów 163
8. Interfejsy komunikacyjne 165
8.1. Obsługa interfejsu I C 166
8.1.1. Adresowanie 10-bitowe 170
8.2. Obsługa uniwersalnego portu szeregowego USART 171
8.2.1. Komunikacja z odbiornikiem GPS 171
8.2.2. Komunikacja z terminalem 174
8.2.3. Odbiór danych 177
8.2.4. Wysyłanie danych 178
8.2.5. Współpraca interfejsu USART z DMA 179
8.2.6. Wyznaczanie prędkości pracy USART bez wykorzystania funkcji API 180
8.3. Obsługa interfejsu SPI 181
8.3.1. Komunikacja z czujnikiem temperatury TC77 186
9. Obsługa kart SD 189
9.1. Karty SD 190
9.2. Komendy kart SD 191
9.3. System plików FAT 192
9.4. Biblioteka FatFs 192
9.5. Implementacja FatFs w mikrokontrolerach STM32 - warstwa fizyczna 193
9.6. Podstawowe operacje na plikach i katalogach 197
9.7. Przeglądanie zawartości karty pamięci, informacje o plikach i katalogach 201
10. Tryby obniżonego poboru mocy 203
10.1. Tryb uśpienia rdzeniamikrokontrolera - sleep mode 204
10.2. Tryb zatrzymania – stop mode 210
10.3. Tryb czuwania - standby mode 212
10.4. Programowany detektor poziomu napięcia 214
11. Implementacja systemu operacyjnego FreeRTOS 219
11.1. Tryby pracy rdzenia Cortex-M3 220
11.2. Stos 222
11.3. Dwa stosy: MSP i PSP 223
11.4. Tryb użytkownika i PSP 224
11.5. Wyjątki systemowe 225
11.5.1. Wyjątek SVC (System serVice Call) 226
11.5.2. Wyjątek PendSV 226
11.5.3. PendSV i SysTick 227
11.6. System operacyjny 228
11.6.1. Wielozadaniowy system operacyjny czasu rzeczywistego 228
11.6.2. Systemy RTOS z wywłaszczeniem zadań 229
11.6.3. Algorytm szeregowania 231
11.7. System operacyjny FreeRTOS 232
11.7.1. Struktura plików systemu FreeRTOS 232
11.7.2. Zasada działania systemu FreeRTOS. Zadania (tasks) i współprogramy (co-routines) 233
11.7.3. Konstrukcja i uruchomienie zadania w systemie FreeRTOS 234
11.7.4. Podstawowe sposoby sterowania zadaniami 235
11.7.5. Komunikacja między uruchomionymi zadaniami, kolejki i semafory, synchronizacja procesów 238
11.7.6. Konfiguracja systemu FreeRTOS. Plik konfiguracyjny FreeRTOSConfig.h 240
11.7.7. Aplikacja wykorzystująca system FreeRTOS do obsługi wielu zadań 241
11.7.8. Wykorzystanie semaforów do obsługi przerwań 244
12. Obsługa interfejsu USB 247
12.1. Podstawy interfejsu USB 248
12.2. Enumeracja. Rodzaje transferów 249
12.3. Punkty końcowe (endpointy) 250
12.4. Klasy urządzeń. Urządzenia interfejsu użytkownika - klasa HID. Raporty 250
12.5. Deskryptory 251
12.5.1. Deskryptor urządzenia i konfiguracyjny 251
12.5.2. Deskryptor raportów 253
12.6. Wykorzystanie klasy HID do komunikacji z mikrokontrolerem 253
12.6.1. Aplikacja po stronie komputera 254
12.6.2. Oprogramowanie mikrokontrolera 255
Dodatki 259
Dodatek A. Schemat elektryczny ZL27ARM 260
Dodatek B. Polecenia NMEA 0183 wersja 2.2 262
B.1. Budowa zdań NMEA 262
B.2. Zdania wyjściowe 263
B.2.1. GGA - Global Positioning System Fixed Data 263
B.2.2. GLL - Geographic Position - Latitude/Longitude 264
B.2.3. GSA – GNSS DOP and Active Satellites 264
B.2.4. GSV – GNSS Satellites in View 265
B.2.5. RMC – Recommended Minimum Specific GNSS Data 265
B.2.6. VTG – Course Over Ground and Ground Speed 265
B.3. Zdania wejściowe 266
Dodatek C. Tabela kodów ASCII 268
Dodatek D. Biblioteka FatFs 270
D.1. Funkcje dostępne w bibliotece FatFs R0.07a 270
Dodatek E. Tabela kodów znakowych sterownika LCD HD44870 277
Skorowidz 279