Tüm simülasyonlar
Dersin tüm simülasyonları tek sayfada; her biri kendi ünitesinde de var.
1. ünite: Cortex-M mimarisi ve bellek haritası
Cortex-M bellek haritası gezgini
4 GB'lık adres alanında bir adres yaz ya da bir birime tıkla: hangi bölgede olduğunu, hangi çevre birimine ve yazmaç ofsetine düştüğünü gör. Adresler STM32F4 başvuru kılavuzundaki düzendedir.
Sol: bölgeler (ölçeksiz değil, 4 GB doğrusal). Sağ: bilinen birimlere tıkla.
2. ünite: Araç zinciri: derleme, bağlama, yükleme, hata ayıklama
Bağlayıcı (linker) bölümleri: Flash ve RAM bütçesi
.text, .rodata, .data, .bss, yığın ve öbek boyutlarını değiştir; Flash ve RAM doluluğunu gör. .data neden iki kez sayılır, printf ve float neden Flash'ı şişirir?
3. ünite: GPIO: yazmaçlarla ve HAL ile
GPIO yazmaç görüntüleyici: MODER, OTYPER, PUPDR, ODR, IDR
Bitlere tıklayarak PA5'i (Nucleo LED'i) ve PC13'ü (kullanıcı butonu) yapılandır. Sanal pin seviyesi, IDR okuması ve aynı işi yapan kayıt düzeyi ile HAL C kodu birlikte değişir. BSRR yazmasını ve kısa devreyi dene.
| MODER | 0x0000_0000 | |
|---|---|---|
| OTYPER | 0x0000_0000 | |
| PUPDR | 0x0000_0000 | |
| ODR | 0x0000_0000 | |
| IDR | 0x0000_0000 |
GPIOA5: input · push-pull · pull none · 00 in
/* kayıt düzeyi */ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; GPIOA->MODER = (GPIOA->MODER & ~(3U << (5 * 2))) | (0U << (5 * 2)); GPIOA->PUPDR = (GPIOA->PUPDR & ~(3U << (5 * 2))) | (0U << (5 * 2)); uint32_t level = (GPIOA->IDR >> 5) & 1U;
/* HAL */
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef g = {0};
g.Pin = GPIO_PIN_5; g.Mode = GPIO_MODE_INPUT; g.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &g);
GPIO_PinState level = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5);Saat kapalı yazmaçlara yazılanlar yok sayılır.
RCC saat ağacı ve PLL hesaplayıcı
HSI ya da HSE, PLLM/N/P/Q ve AHB/APB bölücülerini seç. SYSCLK, APB1/APB2, zamanlayıcı saatleri, USB 48 MHz ve Flash bekleme durumu hesaplanır; sınır aşımları kırmızı yanar.
5. ünite: Zamanlayıcılar ve PWM
Zamanlayıcı ve PWM: PSC/ARR/CCR hesaplayıcı
Sayaç (CNT) testere dişi biçiminde sayar, CCR ile karşılaştırılır, çıkış PWM olur. İstenen frekansı yaz, çözücü 16 bit sınırında PSC ve ARR'yi bulsun; görev oranını ve çözünürlüğü izle.
6. ünite: Kesmeler, EXTI ve NVIC
EXTI ve NVIC: kesme zaman çizelgesi
Üç kesmenin önceliğini ve süresini ayarla, istek anlarını değiştir. Zaman çizelgesi öncelikli kesmeyi (iç içe), bekleyen istekleri, kuyruk zincirlemeyi ve kaybolan ikinci isteği gösterir. EXTI hat çakışmasını da dene.
7. ünite: UART: seri iletişim ve komut satırı
UART çerçeve görselleştirici ve BRR
Bir metin yaz: her karakter start biti, LSB önce 8 veri biti, isteğe bağlı parite ve stop bitine dönüşür. Baud, parite ve stop bitini değiştir, bir biti boz ve alıcının çerçeve (FE) ya da parite (PE) hatasını gör. BRR ve baud hatası hesaplanır.
ADC + DMA: dairesel tampon ve yarım/tam aktarım
ADC her dönüşümde DMA ile tampona yazar. Yarım (HT) ve tam (TC) aktarım kesmelerinde işlemci bitmiş yarıyı işler. İşleme süresini uzat ve taşmanın (overrun) nerede başladığını gör.
9. ünite: I²C ve SPI: zamanlama diyagramları
I²C ve SPI zamanlama diyagramları
I²C'de adres, R/W, veri baytları ve cihaz yokken NACK; SDA'nın yalnız SCL düşükken değiştiğini izle. SPI'da dört kipi (CPOL/CPHA) karşılaştır ve kip uyuşmazlığının okunan baytı nasıl bozduğunu gör.
10. ünite: Düşük güç: Sleep, Stop ve Standby
Düşük güç kipleri ve pil ömrü
Run, Sleep, Stop ve Standby arasında seç; görev döngüsünü (ne sıklıkla, ne kadar uyanık) ayarla ve ortalama akımla pil ömrünü hesapla. Akımlar ders içi tipik değerlerdir, gerçek değer veri sayfasındadır.
11. ünite: FreeRTOS: görevler, zamanlayıcı ve senkronizasyon
FreeRTOS zamanlayıcı görselleştirici
Görevlerin önceliğini, periyodunu ve süresini ayarla; tick tick hangi görevin çalıştığını, kesintiyi, eşit öncelikte zaman dilimlemeyi ve kaçan son tarihleri gör. Paylaşılan mutex ile öncelik tersine dönmesini ve öncelik kalıtımını dene.
3. ünite: GPIO: yazmaçlarla ve HAL ile
3B STM32 geliştirme kartı
Nucleo benzeri kart 3B masada: GPIOA saatini aç, PA5'i MODER ile çıkış yap ve BSRR yaz; başlık pinleri ve LD2 anında değişir. TIM3 PWM'i açınca motor görev oranına göre döner, kartın üstünde zamanlayıcı dalgası görünür. Sürükleyerek döndür, iki parmakla yakınlaştır. Durum testli saf mantıktan gelir.
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; GPIOA->MODER = (GPIOA->MODER & ~(3U << (5 * 2))) | (0U << (5 * 2)); GPIOA->PUPDR = (GPIOA->PUPDR & ~(3U << (5 * 2))) | (0U << (5 * 2)); uint32_t level = (GPIOA->IDR >> 5) & 1U;