Gömülü sistemler alanında, mikrodenetleyiciler temel bileşenler olarak otomatik kontrol, Nesnelerin İnterneti ve endüstriyel uygulamalar gibi senaryolarda önemli bir rol oynamaktadır. ST Company tarafından piyasaya sürülen STM32F407, mükemmel işlevleri ve kullanım kolaylığı nedeniyle pazarın ilgisini çeken, yüksek performanslı ve düşük güç tüketimli bir 32 bit mikrodenetleyicidir. Bu makalede, STM32F407'nin özellikleri, teknik özellikleri, uygulama alanları ve geliştirme ortamını ayrıntılı olarak inceleyeceğiz.
STM32F407 Hakkında
STM32F407 yonga serisi, STMicroelectronics tarafından ARM Cortex™-M4 çekirdeği temel alınarak piyasaya sürülen yüksek performanslı bir mikrodenetleyicidir. Bu seri, 90 nanometre NVM üretim teknolojisi ve ART (Adaptive Real-Time Memory Accelerator™) teknolojisini kullanmaktadır.
STM32F407 Özellikleri
STM32F407, ARM Cortex-M4 çekirdeğine dayanır, DSP komutlarına ve bir kayan nokta birimine (FPU) sahiptir ve saat hızı 168 MHz'e kadar çıkabilir. İşte başlıca özellikleri:
- Yüksek Performans
Kayan nokta işlemlerini ve düşük saat döngüsü gecikmesini destekleyen 32 bit Cortex-M4 çekirdeği ile donatılmış olup, yüksek hızlı hesaplama yetenekleri sunabilir.
- Düşük Güç Tüketimi
Dinamik voltaj ayarlama teknolojisi, farklı güç tüketim modları arasında geçiş yapmak ve sistemin enerji tüketimini azaltmak için kullanılır.
- Çoklu Depolama Yapılandırmaları
Çeşitli uygulamaların depolama alanı gereksinimlerini karşılamak için 1 MB'a kadar Flash ve 192 KB RAM.
- Güçlü Çevre Birimi Desteği
STM32F407, SPI, I2C, UART vb. gibi zengin iletişim arayüzlerine sahiptir; 3 adede kadar 12 bit ADC dönüştürücü, 2 adet DAC dönüştürücü ve yüksek çözünürlüklü zamanlayıcıları destekler.
- Güvenlik ve Güvenilirlik
Yerleşik donanım CRC modülü, gerçek zamanlı sağlama toplamı hata algılama işlevi sağlar; Watchdog zamanlayıcı, sistemin çalışma durumunu izleyebilir ve yazılım kilitlenmesini önleyebilir.
STM32F407 Teknik Özellikleri
| Specification | Details |
|---|---|
| MCU Model | STM32F407ZGT6 |
| Flash Memory | 1MB |
| Clock Frequency | Up to 168MHz |
| ADC | Three 12-bit |
| DAC | Two 12-bit |
| DMA | Two DMA controllers |
| Timers | Up to 17 timers |
| GPIO | Up to 120 configurable GPIO pins |
| Interfaces | Built-in I2C, SPI, USART, I2S, CAN, and SDIO communication interfaces |
STM32F407'nin Kullanımı
Esnekliği ve kolay ölçeklenebilirliği sayesinde STM32F407, aşağıdakiler dahil ancak bunlarla sınırlı olmamak üzere çeşitli akıllı senaryolarda yaygın olarak kullanılmaktadır:
- Nesnelerin İnterneti (IoT) cihazları
STM32F407'nin düşük güç tüketimi, onu sensörler ve kontrolörler gibi IoT cihazlarının çekirdek işlem birimi olarak uygun hale getirir.
- Endüstriyel otomasyon
CNC takım tezgahları ve endüstriyel robotlar gibi alanlarda, STM32F407 sistem kontrolü, veri toplama ve işleme ile çevresel cihazlarla iletişimden sorumlu olabilir.
- Tüketici elektroniği
STM32F407, akıllı evler ve giyilebilir cihazlar gibi tüketici elektroniği alanlarında, tüketicilerin performans ve güç tüketimi gereksinimlerini karşılamak için kullanılabilir.
STM32F407 Geliştirme Kaynakları
Geliştiricilere kolaylık sağlamak amacıyla ST, aşağıdakiler dahil olmak üzere çok sayıda geliştirme kaynağı ve araç desteği sunmaktadır:
- Discovery ve Nucleo serisi geliştirme kartları
- Keil uVision ve IAR gibi entegre geliştirme ortamları (IDE'ler)
- JLINK, CMSIS-DAP, ULINK veya STLINK hata ayıklayıcı
- HAL/HLL kütüphanesine dayalı STM32CubeF4 Yazılım geliştirme kiti
Bu kaynaklar, geliştirme sürecini basitleştirmeye, geliştirme döngüsünü kısaltmaya ve geliştiricilerin teknik destek almasına, deneyimlerini paylaşmasına ve kaynaklardan yararlanmasına olanak tanır.
HAL Kütüphanesi
HAL kütüphanesi, yani Donanım Soyutlama Katmanı, aslında STM32F407'nin aygıt sürücüsü paketidir. Kod dosyası şu yolda bulunur: \Drivers\STM32F4xx_HAL_Driver.

CMSIS
CMSIS (Cortex Mikrodenetleyici Yazılım Arayüz Standardı), ARM tarafından resmi olarak tasarlanmış bir sürücü paketidir. Blok şeması şu şekildedir:

Bu CMSIS yazılım paketi sayesinde, ARM'ın çeşitli yonga üreticilerinin yaygın olarak kullanılan RTOS'larının çevre birimi sürücülerini, DSP dijital sinyal işleme özelliklerini, indirme araçlarını ve API'lerini tek bir çatı altında birleştirmesi bekleniyor.
STM32CubeMX, kullanıcıların saatleri, çevre birimlerini, pinleri, RTOS'u ve çeşitli ara yazılımları kolayca yapılandırabilmelerini sağlamak amacıyla ST tarafından 2014 yılında piyasaya sürülen bir grafik tabanlı geliştirme yazılımıdır. Blok şeması aşağıdaki gibidir:

Bu grafik yazılımı sayesinde mühendislik kodlarını kolayca oluşturabilir ve MDK, IAR ve TrueSTUDIO gibi derleyicileri destekleyebilirsiniz.
STM32F407 Geliştirme Kartı Projesi
Bu geliştirme denemesinde, bir LED'i yakmak veya LED'de yanıp sönme efekti oluşturmak için HAL kütüphanesini kullanıyoruz.
1. Adım: STM32CubeMX'i açın, LED'e karşılık gelen pini bulun ve bunu GPIO çıkışı olarak yapılandırın.

2. Adım: SYS'de Serial Wire seçeneğini seçin. Yalnızca bu seçenek seçildiğinde, sonraki projeler st-link kullanılarak normal şekilde yazdırılabilir.

3. Adım: Harici saati açın ve 407 168 MHz'lik maksimum frekansa ulaşmasını sağlayın.

4. Adım: Mühendislik kodunu oluşturun.

Oluşturulan kod aşağıda gösterildiği gibidir ve tüm pin ve saat yapılandırmaları ayarlanmıştır.
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct= {0}:
/*GPIO Ports Clock Enable */
_ _HAL_RCC_GPIOF_CLK_ENABLE():
_ _HAL_RCC GPIOH_CLK_ENABLE():
_ _HAL RCC GPIOA CLK_ENABLE():
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET):
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET):
/*Configure GPIO pins:PF9 PF10 */
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10:
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP:
GPIO_InitStruct.Pul1 =GPIO_NOPULL:
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW:
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct):
/*EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0):
HAL NVIC_EnableIRQ(EXTI2_IRQn):
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI3_IRQn):
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI4_IRQn):
}
Ardından, ana fonksiyonun while(1) döngüsü içinde LED ışığını kontrol edecek programı yazın.
while (1)
{
/* USER CODE END WHILE */
//Light up the LED
//HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10|GPIO_PIN_9, GPIO_PIN_RESET);
{
//LED flashes
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9|GPIO_PIN_10);
HAL_Delay(1000);
}
/* USER CODE BEGIN 3 */
}




