Eclipse + GNU ARM + STM32 - HAL veya SPL


10

ARM geliştirme ile başlayacağım (2 yıllık AVR'den sonra) ve üzerinde stm32f4 mikroişlemci bulunan STM DISCOVERY kartını aldım.

Keil kod sınırını sevmiyorum ve ücretli bir sürüm almak için param yok, çünkü eclipse + ARM gcc ile gitmeye karar verdim.

Öğreticilerden sonra gcc ARM araçları + openocd + make utils vb.

Sorum 'paket' eklentisi hakkında. Her yeni başlayan gibi ben de yeni STM HAL mı yoksa eski SPL mi kullanacağım konusunda kafam karıştı.

Anladığım kadarıyla HAL soyutlamayı kol için Arduino eşdeğeri olarak adlandırılabilecek bir seviyeye uyguladı. Öte yandan SPL, kodlamayı daha hızlı hale getirmek için yeterli soyutlama sağlar, ancak yine de çip düzeyinde uğraşmanız gerekir.

Bu anlayışla HAL'yi kullanmaktan ziyade işleri daha iyi anlamak için SPL'ye bağlı kalmak istiyorum.

Bilmek istediğim, STM için paketleri kullanmak beni HAL kullanmaya zorlar mı? Öyleyse, birisi SPL'yi kurulumumla nasıl kullanacağımı gösterebilir mi?


1
"öğreticiler" biraz belirsiz, bu yüzden "paketleri" eklentisi "hakkında bilmiyorum ve SPL (STM çevre kitaplığı?) veya SPCL ne olduğu hakkında hiçbir fikrim yok. Belki de bu soru için yeterli değilim, ama iki yıldır STM32 ile çalışmak beni meraklandırdı ...
Arsenal

2
SPL Standart Çevre Kütüphanesi , diğer taraftan ben de SPCL bilmiyorum.
Bence Kaulics

2
Günümüzde STM'nin tercih ettiği ve desteklediği yol HAL tabanlı kod üreten STM32CubeMX kullanmaktır. Ve itiraf etmeliyim ki önemli şeyler sakladıkları için otomatik araçların hayranı değilim.
Eugene Sh.

1
Her ne kadar çoğunlukla diğer STM32 işlemci SPL sürümleriyle uyumlu olsa da, ST'nin STM32F7 için SPL olduğuna inanmıyorum.
Tut

SPCL biti için üzgünüm. O bir hataydı. Yine de kısaltmalara alışkınız.Ayrıca sadece iki kez kontrol edildi ve kartım stm32f4 varyantı. Başka bir hata. Hala genel sorular duruyor, tutulma ile standart çevresel kütüphaneyi nasıl kullanırım?
Ankit

Yanıtlar:


6

Gördüğüm gibi SPL'nin kullandığınız IDE ile bir ilgisi yok. Projenize ilgili modülleri (örn. Stmf4xx_dma.c ve stmf4xx_dma.h) dahil edebilir ve .c ve .h dosyalarında açık (ve çok iyi tanımlanmış) işlevleri kullanabilirsiniz. Aslında ben sadece windows komut istemini kullanarak gcc, openocd ve SPL ile stmf411 nükleo öğreniyorum; IDE yok. Tutulmadaki paketler muhtemelen HAL'ı kullanmaya zorlar (çünkü tutulması için indirilen 'Paketler' klasöründe sadece HAL modüllerini görüyorum).

HAL'ın kendisi IMO'su gereğinden fazla katmanlı görünüyor. Kayıtlara doğrudan erişim yorucu olur ve zor okunabilir. SPL doğru görünüyor. st.com forumundaki guru clive1 de HAL yerine SPL'yi tercih ediyor. İşte o forumdaki sorum ... yardımcı olabilir.

Nucleo stmf411 için USART konusunda yardıma mı ihtiyacınız var


1
Bu konuda sana tamamen katılıyorum. HAL, tüm soyutlama konseptiyle denize düşmüş gibi görünüyor. Bununla birlikte, programlar daha hızlı geliştirilecek olsa da, öğrenme ve gelecekteki kanıtlar için gerekli olduğunu düşündüğüm tam olarak ne olduğunu gerçekten öğrenemezsiniz. Bir test olarak uvision'da bir proje oluşturdum ve yazılım paketleri yerine eski desteği seçtim ve SPL dosyalarını içerdiği görülüyor. Ayrıca bağlantı için teşekkürler!
Ankit

1

HAL ile ilgili hiçbir deneyimim yok, ancak zamanımı kurtarmak için birçok kez SPL kullandım. İnanıyorum ki bu Gömülü işlemcilerin hedef topluluğu 2 gruptur: Donanım katmanlarıyla ilgilenmek istemeyen ilk grup. Yazılım programcıları, olağan hobiler ve Arduino, Ahududu tapanları. Eğer bu grupta iseniz HAL sizin için iyi bir seçim gibi görünüyor. Elektronik ve donanım camiasından gelen saniye

GPIO_A->PIN &= ~(1 << 15);

için

LED_On(1)

LED'i açmak için ve temel olarak ne yaptıklarını bilmek istiyorum. bu gruba sahipseniz ve MCU'nuzun referans kılavuzunu ve programlama kılavuzunu okumak için yeterli zamanınız varsa, belki de kayıt düzeyinde programlama başka bir seçenektir. ancak sadece 2'nin üzerinde seçenek arasında karar vermek istiyorsanız: ST'nin desteklediği için HAL daha iyi bir geleceğe sahiptir, ancak SPL yeni bir marş motorunu anlamak için daha kolay bir yoldur. Belki bu http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/


1
Bağlantı için teşekkürler, ilginç okuyun! Haklısın, yeni başlayanlar için SPL öğrenmek için daha iyi bir yol gibi görünüyor (ve bu benim de seçtiğim yol). Cevabınızdaki BTW LED_Off olmalıdır
Ankit

1

Bu IDE'yi alın: STM32 için System Workbench - Eclipse'e dayalı olarak ücretsizdir ve hem arm-gcc hem de openocd'yi tek bir pakette bulundurun.

Ve kütüphaneler hakkında: SPL ve HAL yanında şimdi LL mevcuttur. Eache biri bazı rahatlığını ve dezavantajları vardır ve siz seçmelisiniz neye ihtiyacınız. Ve anladığım kadarıyla , hepsinin ST için deneysel statüsü var. Her birine notlarımın altında:

  • SPL: eski, hantal, ekstra ram kullanımı yok, esnek
  • HAL: gerçek, hantal, ekstra koç kullanımı, esnek değil
  • LL: gerçek, ligtweigth, ekstra ram kullanımı yok, esnek

Notlarım için kısa açıklama:

  • hantal - büyük flaş kullanımı, çevre ile çalışmak için "süper" evrensel işlevler
  • ekstra ram kullanımı - HAL ile ilgilidir, ram bulunan yapılarda çevresel durumun bir kopyasına sahiptir ve her yerde ve her zaman kullanır
  • esnek değil - ve yine HAL hakkında, farklı durumlar için birçok işlevi var, ama! çoğu gerçek cihazlar için kullanılamaz (halklar USart'tan bayt bayt almak için HAL'ı yeniden başlatmaya çalışır >_<, TIM + DMA için tüm işlevler TIM kaydını yeniden yazmak için uygulanır ve başka hiçbir şey yoktur ...)

Biraz rehabilitasyon için HAL: acemi için büyük bir avantajı var - STMCubeMX tarafından desteklendi.

DÜZENLE:

Ben unutmak libopencm3 - bu alternatif Kütüphane. Ben kullanmadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.