Nasıl çalıştığını öğrenmek için yukarıdakilerin hiçbirini kullanmak istemiyorsunuz. Bir kol çapraz derleyici ve st gelen belgeleri alın. Kodlamaya başla. Bu yongalar genellikle programlanması gerçekten kolaydır. belgeler size hangi kayıtların ne yaptığını gösterir.
Bu kütüphanelerin herhangi birinin / hepsinin bu anlayışı / yükü / işi sizden kaldırması ve bir api benzeri bir uygulama programlama deneyimi çağırması gibi hissetmesini sağlaması amaçlanmıştır. Bir çok insanın istediği şey bu. Bu kütüphanelerin bütün kaynağını anlamaya yardımcı olmak için kullanabilirsiniz, ancak bu konuda daha iyi hale geldikçe kütüphanelerde delikler ve problemler, bazen çok korkutucu kodlar bulacaksınız. kod bir araya getirilmiş, bir yongadan diğerine genel ve kabaca yazılmış, belki de yonganızın desteklemediği, vb. özelliklere sahip. Görev için 10 - 100 kez çok fazla kod var, birçoğunun en iyi duruma gelebileceğinden emin olabilirsiniz, ancak neden ilk başta oradalar?
Kendinizinkine gidin ya da bu kütüphanelerden birini kullanıyor olsanız da, ne yaptıklarından memnun olup olmadığını, mantıklıysa, çip belgelerine uyduğunu vb. yanlış giderse nedenini bulmak için sizinki kadar eşyalarını kazmak zorunda kalırsınız.
Çip dokümanlar da mükemmel değil, bu eğlenceli bir parçası.
Montajın neden çıplak metal programlama hakkında bir tartışmada ortaya çıktığını anlamıyorum. Çok az montaj ile alabilirsiniz. Bu cortex-m çipleri için, teknik olarak sadece önyükleme yapmak için bu kadar bir alana ihtiyaç duyarsınız:
.globl _start
_start:
.word 0x20001000
.word main
Ne veriye ne de bss'ye güvenemezsiniz ve asgari seviyeden asm ile geri dönemezsiniz. Ama bu, çıplak metalden en iyi olan için ihtiyacın olan tek şey. Şimdi kesinti yapmak istiyorsanız, vektör tablosunda daha fazla girişe ihtiyacınız var. daha fazla .word satırları. Daha fazla takas öneririm, ama belki 10 veya 20 satır daha.
bu genellikle kullandığım tek şey.
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
Evet cortex-m0 diyor ama bu benim m4 kodum için gerçek önyükleme. Bunun thumb2 değil thumb olmasını tercih ederim. Ve bu kodu sadece bir korteks-m'den diğerine yeniden kullanıyorum, yığın göstergesinin adresini gerektiği gibi değiştiriyorum, bu yüzden m0, m3 ve m4 için çalışıyor. Henüz bir m7'm yok, ne de çok araştırdım.
Fpu'nun etkinleştirilmesi, belirli talimatlar gerektiğinden birkaç satır daha gerektirebilir. Ancak mesele, düşük seviye programlama ve asm ile karıştırılmamasıdır. C bir uygulama yazmanın yanı sıra çipi yapılandırmak için ihtiyacınız olana sahiptir. Bahsettiğiniz kütüphaneler asm değil de C dilinde yazılmıştır, bu yüzden açıkça kullanmaları da gerekmez.
İçsel çalışmaları öğrenmek istiyorsanız, kendi kodunuzu yazınız. Bu kütüphaneleri referans olarak kullanmayınız. Bazen sadece kodları kırmaya çalışmaktan çok daha kolaydır. (sadece ST değil, tüm satıcılar. Satıcılardan birinin bir kod satırı vardı, bu yüzden endişe verici bir röportaj sorusu olarak kullanıyorum, hiçbiri buraya göndermeyeceğim).
ST kesinlikle ama diğer üreticilerin de güç tasarrufu için saatin çipin bölümlerini etkinleştirebilmesi için, bu nedenle içeri girip bir ışığı yanıp sönmeye çalışmadan önce, o gpio bloğu için etkinleştirme bitini bulup çıkıp çıkmadığını görmeniz gerekir. sıfırlama etkinse, o zaman etkinleştirilmezse, bir gpio mantığıyla bir saate izin vermeden konuşmak, işlemciyi asla yanıt vermeyecek bir mantıktan yanıt beklerken basitçe işlemciyi kapatır. Size her zaman bu olanaklardan bahsetmezler. Etkinleştirildikten sonra bazen belirli bir çevre birimi için initte size yol gösterirler. ST docs oldukça iyi. Belgelendirme için oldukça kötü bir not alan mikroçipten geliyorsanız, bir sorun yaşamazsınız.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
veyaDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
sırasıyla bulunur.