C ile Gömülü Sistemler için Yazılım Geliştirme Eğitimi
İçerik ARM Geliştirme Ortamı GPIO sürücüsü Seri Haberleşme Interrupt ve Callback UART SPI İşletim Sistemi(FreeRTOS) CAN SD Kart ve SDIO FAT dosya sistemi Bootloader RTC
Arm Mimarisi Acorn RISC Machines-Advanced RISC Machines ARM çekirdekleri www.arm.com firması tarafından tasarlanıyor Cortex-A (High-Performance-MMU) Cortex-M (Low-Cost-MPU) Cortex-R (Real-Time) STM32 için 32-bit işlemci çekirdeği(cortex-a 32/64 bit) Veriyolu 32 bit Adres yolu 32 bit Çekirdek farkları Fiyat Hız Silikon boyutu STM32F407 STM32 Cortex -M4
Geliştirme Ortamı Kurulumu CooCox IDE IDE: http://www.coocox.org/software/coide.php Toolchain: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/download s Debugger: http://www.st.com/en/development-tools/st-link-v2.html AC6 IDE,Toolchain ve debugger: http://www.st.com/en/development-tools/sw4stm32.html STM32Cube: http://www.st.com/en/embedded-software/stm32cubef4.html
Arm Cortex-M4 Çekirdeği CPU MPU (Memory Protection Unit) NVIC (Nested interrupts with priority) FPU (Floating Point Unit) DSP JTAG İçerisinde bellek yok, çevre birimler yok, core-peripheral var sadece
STM32F407 Blok Diyagramı
STM32F407 Memory Map
İlk Uygulama
GPIO donanımı Alternate Function Peripheral GPIO Peripheral Alternate Function Peripheral GPIO konfigurasyonu GPIO çevresel birimi açılmalı RCC Clock ayarlanmalı MODER Çıkış OTYPER Push-Pull BSRR veya ODR Çıkış değeri
GPIO Sürücüsü
Seri Haberleşme 8Bit Data Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Seri Çıkış Pin 3V3 0V Pin Pin Pin Pin Pin Pin Pin Pin period Paralel Çıkış RS232 RS422 RS485 SPI I2C Ethernet CAN USB
SPI Haberleşmesi
SPI Haberleşmesi
UART Sürücüsü UART konfigurasyonu PA0 UART4 TX,PA1 UART4 RX UART4 çevresel birimi açılmalı RCC Clock ayarlanmalı Baud rate ayarlanmalı UART enable edilmeli GPIOA ayarlanmalı MODER Alternate function AFRL Alternate 8 UART DR Gönderilecek veri
Kesme(Interrupt) Kullanımı Kesme nedir? Uygulamanın normal çalışmasını kesen asenkron olaylardır. Genellikle donanım kaynaklıdır. Bir veri alınması, gönderilmesi, bir zamanlayıcının tetiklenmesi gibi. Polling ile yapılacak işlemlere alternatiftir. STM32F407 kesmeleri nasıl işler? Donanımsal olarak her olay için ayrı ayrı atanabilecek bir fonksiyon tablosu bulundurur. Kesmelerin öncelikleri ayarlanabilir. Bir kesme çalışırken daha yüksek öncelikli bir kesme oluşursa, ikinci işlem yapıldıktan sonra ilkine dönülür(nvic) IRQ2 IRQ1 Nested IRQ1 main() main()
Kesme(Interrupt) Kullanımı void UART4_IRQHandler( void )
Callback Kullanımı Callback nedir? Bir olay oluştuğunca çalışmasını istediğimiz fonksiyonun adresi (function pointer) dir. Tanımlama: returntype (*functionpointer)( parameters )
Modül arayüzü İşlemci Uygulama Yazılımı Motor Sürücü arayüzü Motor Sürücü arayüzü Analog Motor sürücü Modulu Seri Motor sürücü Modulu Analog çıkış UART Analog Motor sürücü Seri Motor sürücü Motor Motor
AT komutları ile çalışma 1 Komutlar bir enumeration içerisinde tanımlanır. Komut ve cevabı(response) parse edecek fonksiyon(callback) için bir yapı(struct) tanımlanır. Bu yapı türünden bir liste içerisine çalışılacak komutlar eklenir. 3 2 Her callback fonksiyonu kendisine gelecek cevabı parse edecek şekilde düzenlenir. UART sürücüsünden alnan veriler içerisinde OK\r\n ve ERROR\r\n aranarak cevabın tamamlandığı anlaşılarak callback fonksiyonları çalıştırılır.
CAN Protokolü BOSCH tarafından tasarlanmıştır Multi-master Max 1Mbps hız
CAN Frame 11 bit/ 29 bit Identifier 0-8 byte data
CAN Transceiver CSMA/CD+AMP
CAN Arbitration
CAN Sürücüsü
CAN Paket Filtreleme
İşletim Sistemleri Single Task main1() main() Multi Task main2() main3() Do smth. Do smth. Do another thing Do others Do another thing Do others Herhangi bir iş içerisinde beklemek diğer işleri geciktirmez. Task içerisinde beklemek ( Sleep() ) uyumak anlamına gelmez.
FreeRTOS ve ilk uygulama https://www.freertos.org/ Preemptive Nesneler Tasks Semaphores Mutexes
Bootloader Ana uygulama yı yükleyen ve çalıştıran alt uygulama dır. Flash Memory (Optional)Configuration Area Configuration Start Address İşlemci ilk çalıştığında doğrudan veya seçime balı olarak çalıştrılır. Görevleri: Ana uygulamayı güncelleyebilmek Ana uygulamayı çalıştırmak Uygulama Application Start Address Reserved Bootloader Reset Address
Bootloader Normal bir uygulamadan farkı yoktur. Yapılacak değişiklikler uygulama tarafında olacaktır. Uygulama başlangıç adresi değiştirilmeli (Linker ayarları). Vector tablosu taşınmalı (Yazılım içerisinde) Flash Memory Configuration Area Çalışması bir süreye veya GPIO girişine bağlı olabilir. İstenen haberleşme arayüzü üzerinden uygulama yazılımı güncellenebilir. Uygulama Uygulamayı güncelleyebilmek için Flash memory sürücüsü gereklidir. Reserved Bootloader
RTC Sistemin gücü kesilse dahi çalışabilecek, düşük güç tüketimli bir sayıcıdır. Bunun için Vbat girişine batarya bağlanmalıdır. Artık yıllar gibi standart takvim hesabı dışındaki hesaplamayı da otomatik olarak yapar. HSE,LSE ve LSI clock ile çalışabilir. En doğru yol LSE(32.768KHz) ile çalışmaktır. HSE güç kesildiğinde çalışmamakta, LSI ise düşük doğruluktadır.
RTC RTC kurulumu: RTC okuma:
SDIO Çevresel Birimi
SDIO Haberleşmesi
SDIO-SDCard Bağlantıları PC8~11 SDIO D0~3 (Bidirectional) PC12 SDIO CK (Output) PD2 SDIO CMD (Bidirectional) Bidirectional çıkışlarda pull-up bulunmalıdır. Mümkünse dahili pull-up lar aktif edilmelidir.
SDIO Sürücüsü 1)Low Level Init SDIO pinlerini initialize eder. 2)SDIO Init SDIO çevresel birimini initialize eder. 3)Card Initialize Bağlı olan SD kartı sorgular ve bilgilerini(kart tipi, bellek boyutu vs.) alır. 4)SDIO_Write/Read Block Sector bazında yazma ve okuma işlemlerini yapar
FAT Dosya Sistemi
FAT Dosya Sistemi
Teşekkürler Eğitim dökümanına https:///trainingdocuments.php adresinden ulaşabilirsiniz.