19 Eylül 2019, 16:21:05

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


STM32F4 DİSCOVERY KARTI İLE ARM PROGRAMLAMA DERSLERİ

Başlatan mfatihkoseoglu, 11 Haziran 2019, 01:49:57

mfatihkoseoglu

STM32F407VG İle Led Örneği STDPeriph Kütüphaneleri İle #Ders12


Halil Gök

Hocam bende de stm32f051 geliştirme kiti var aynı kit olmasada mantığını kavrayarak uygulamalarınızı yapablilirmiyim

mfatihkoseoglu

Alıntı yapılan: Halil Gök - 17 Haziran 2019, 17:20:56Hocam bende de stm32f051 geliştirme kiti var aynı kit olmasada mantığını kavrayarak uygulamalarınızı yapablilirmiyim

Evet hocam, sadece ben her derste datasheet okurken sizde kendi boardunuzun serisindeki önemli noktaların ne olduğunu görün yeter. Programlama temel mantığı aynı. İyi çalışmalar

mfatihkoseoglu

STM32F407VG İle Led Örneği HAL Kütüphaneleri İle #Ders13


mfatihkoseoglu

STM32F4 Pull Up, Pull Down Nedir ve Buton Bilgisi #Ders14


mfatihkoseoglu

STM32F407VG Buton İle Led Kontrolü Dijital Giriş #Ders15


mfatihkoseoglu

STM32F407VG Buton İle Led Örneği #Ders16


osman_

Elinize sağlık hocam benim gibi yeni başlayanlar için çok güzel kaynak oluyor. Günde en az 1 video gelse bence çok makbule geçer. Hem de hızlı ilerler.

Videoları izlerken şu noktada takıldım. Saçma bir soru belki bilmiyorum.
RCC->CR
RCC->PLLCFGR

gibi kodları yazarken kodların isimlerinin bunlar olduğunu nereden öğreniyoruz?
Mesela dökümanda PLL configuration bölümünde örnek C kodu yok. Doğrudan register isimlerini mi kullanıyoruz? Yoksa register isimlerine başka bir dökümandan mı ulaşıyoruz?

Tagli

Bunlar genelde reference manual'deki donanım adları ve register isimleri oluyor. Yani "donanım->register" şeklinde. TIM3->CR1 gibi.

Bit isimleri de "donanım_register_bit" gibi oluyor. Bit isimlerinde TIM1, TIM2 gibi ayrımlar olmuyor, sadece TIM yazılıyor örneğin. Veya GPIOA, GPIOB değil de sadece GPIO yazılıyor. Sonlarına _Msk veya _Pos gibi ekler gelebiliyor. Örnek: TIM_CR1_CEN

Bu genel kuralların istisnaları var ancak bunlara tek tek değinmek zor. Örneğin GPIOA->AFR[0] gibi dizi biçiminde olanlar var. OTG_FS modülünde de bir dolu istisna ve hatta hiç tanımlanmamış şeyler var. Modern bir IDE'de kod tamamlama özelliği bu konuda çok yardımcı olacaktır.

Emin olmak için işlemcinin ilgili header dosyasına bakılabilir. Örneğin stm32f407xx.h gibi. Dosya isimleri işlemciye göre değişir tabi.
Gökçe Tağlıoğlu

osman_

Alıntı yapılan: Tagli - 24 Haziran 2019, 20:36:05Bunlar genelde reference manual'deki donanım adları ve register isimleri oluyor. Yani "donanım->register" şeklinde. TIM3->CR1 gibi.

Bit isimleri de "donanım_register_bit" gibi oluyor. Bit isimlerinde TIM1, TIM2 gibi ayrımlar olmuyor, sadece TIM yazılıyor örneğin. Veya GPIOA, GPIOB değil de sadece GPIO yazılıyor. Sonlarına _Msk veya _Pos gibi ekler gelebiliyor. Örnek: TIM_CR1_CEN

Bu genel kuralların istisnaları var ancak bunlara tek tek değinmek zor. Örneğin GPIOA->AFR[0] gibi dizi biçiminde olanlar var. OTG_FS modülünde de bir dolu istisna ve hatta hiç tanımlanmamış şeyler var. Modern bir IDE'de kod tamamlama özelliği bu konuda çok yardımcı olacaktır.

Emin olmak için işlemcinin ilgili header dosyasına bakılabilir. Örneğin stm32f407xx.h gibi. Dosya isimleri işlemciye göre değişir tabi.

Çok teşekkürler hocam çok yararlı oldu.

osman_

system_stm32f4xx.c dosyasını her projeye otomatik dahil etmiş oluyoruz. Bu dosya içinde çeşitli PLL ayarları var.
main.c içinde tekrardan PLL ayarı yapmak gerekiyor mu? Yoksa system_stm32f4xx.c içinden konfigürasyonu gerekli şekilde ayarlamak yeterli mi? Hangi yöntem daha sağlıklı olur?

Tagli

system_stm32f4xx.c üretici tarafından veriliyor ve ben bunu hiç kurcalamamayı tercih ediyorum. CubeMX kullanıcı tercihlerine göre bunu değiştirip her seferinde ayrı mı oluşturuyor onu bilmiyorum (CubeMX'i kod üretmek için kullanmıyorum). Ben kendi yazdığım başlangıç kodunun içinde yapıyorum ayarları.

Dilersen kendi kodun içinde SystemCoreClockUpdate() fonksiyonunu çağırarak SystemCoreClock global değişkeninin güncellenmesini sağlayabilirsin. Ancak clock değeri kararlı rejime oturmadan bu fonksiyonu çağırırsan hatalı bir değer üretir. Gerçi geçeceğin hızı zaten biliyorsan fonksiyon çağırmadan elle de güncelleyebilirsin bu değişkeni. Şahsen ben genelde kullanmıyorum bile bunu. Ama bazı kütüphane fonksiyonları veya RTOS'ların çalışması SystemCoreClock'a doğru değer atanmasına bağlı olabilir.
Gökçe Tağlıoğlu

osman_

24 Haziran 2019, 23:46:48 #27 Son düzenlenme: 24 Haziran 2019, 23:51:11 osman_
Alıntı yapılan: Tagli - 24 Haziran 2019, 23:35:42system_stm32f4xx.c üretici tarafından veriliyor ve ben bunu hiç kurcalamamayı tercih ediyorum. CubeMX kullanıcı tercihlerine göre bunu değiştirip her seferinde ayrı mı oluşturuyor onu bilmiyorum (CubeMX'i kod üretmek için kullanmıyorum). Ben kendi yazdığım başlangıç kodunun içinde yapıyorum ayarları.

Dilersen kendi kodun içinde SystemCoreClockUpdate() fonksiyonunu çağırarak SystemCoreClock global değişkeninin güncellenmesini sağlayabilirsin. Ancak clock değeri kararlı rejime oturmadan bu fonksiyonu çağırırsan hatalı bir değer üretir. Gerçi geçeceğin hızı zaten biliyorsan fonksiyon çağırmadan elle de güncelleyebilirsin bu değişkeni. Şahsen ben genelde kullanmıyorum bile bunu. Ama bazı kütüphane fonksiyonları veya RTOS'ların çalışması SystemCoreClock'a doğru değer atanmasına bağlı olabilir.

Anladım hocam. O dosyaya hiç dokunmadan Clock_Config() gibi bir fonksiyon oluşturup içinde HSE, PLL vb. ayarlamak benim için en basit ve en garanti yöntem olacak sanırım şu anlık.

Yeri gelmişken öğrenmek istediğim bir mesele daha var. Register düzeyinde ve stdperiph lib ile kod yazmak arasında geliştirme sırasında çok ciddi zaman ve performans farkı oluyor mu? Register ile kodlamak daha kolay ve anlaşılır gibi geliyor. Stdlib kullanınca bir çok kalıbı ezberlemek gerekiyor sanki. Bu konuda ne düşünüyorsunuz? Ne tavsiye edersiniz?

Emou

Elinize sağlık hocam ilk defa iki kütüphane ve register kısmına ayrı ayrı değinen birisini gördüm. Kanalınıza da abone oldum müsait zamanlarımda da çektiğiniz videoları açıp izlerim  ::ok

Videoların devamını diliyorum. Umarım hepimiz için faydalı olur.

mfatihkoseoglu

Alıntı yapılan: Emou - 25 Haziran 2019, 22:44:51Elinize sağlık hocam ilk defa iki kütüphane ve register kısmına ayrı ayrı değinen birisini gördüm. Kanalınıza da abone oldum müsait zamanlarımda da çektiğiniz videoları açıp izlerim  ::ok

Videoların devamını diliyorum. Umarım hepimiz için faydalı olur.

Sayın Emou güzel yorumunuz için teşekkür ediyorum ve takipte kalmanızı temenni ediyorum, daha güzel dersler inşallah gelecek (: