Untuk mempelajari cara kerjanya, Anda tidak ingin menggunakan yang di atas. Dapatkan compiler arm cross dan dokumentasi dari st, selesai. Mulai coding. chip ini umumnya sangat mudah diprogram. dokumentasi memberi tahu Anda apa bit dalam register apa melakukan apa.
Setiap / semua perpustakaan ini dimaksudkan untuk menghilangkan pemahaman / beban / pekerjaan dari Anda dan membuatnya merasa seperti hanya memanggil api seperti pengalaman pemrograman aplikasi. Itulah yang diinginkan banyak orang. Anda dapat menggunakan semua sumber untuk pustaka ini untuk membantu memahami, tetapi saat Anda menjadi lebih baik, Anda menemukan lubang dan masalah di pustaka, kadang-kadang kode yang sangat menakutkan. kode dilemparkan bersama, ditulis secara umum dan secara kasar porting dari satu chip ke yang lain, mungkin fitur pendukung yang tidak dimiliki chip Anda, dll. Dan mereka semua memiliki jumlah overhead yang berlebihan. 10 hingga 100 kali terlalu banyak kode untuk tugas itu, tentu banyak yang dapat mengoptimalkan tetapi mengapa ada di sana di tempat pertama?
Apakah Anda pergi sendiri atau menggunakan salah satu perpustakaan ini, Anda harus tetap melihat sumber untuk perpustakaan yang Anda gunakan untuk melihat apakah Anda merasa nyaman dengan apa yang mereka lakukan, jika masuk akal, cocok dengan dokumentasi chip, dll. Ketika sesuatu salah Anda cenderung harus menggali barang-barang mereka sebanyak milik Anda untuk mencari tahu mengapa.
Perhatikan bahwa chip docs juga tidak sempurna, itu adalah bagian dari kesenangan.
Saya tidak mengerti mengapa perakitan muncul dalam diskusi tentang pemrograman bare metal. Anda bisa bertahan dengan sangat sedikit perakitan. Untuk chip korteks-m ini, secara teknis Anda hanya membutuhkan sebanyak ini untuk di-boot:
.globl _start
_start:
.word 0x20001000
.word main
Anda tidak dapat mengandalkan data atau bss dan Anda tidak dapat kembali dari main dengan minimal ASM. Tapi itu semua yang Anda BUTUHKAN untuk mendapatkan logam telanjang. Sekarang jika Anda ingin melakukan interupsi Anda perlu lebih banyak entri dalam tabel vektor. lebih banyak baris kata. Saya merekomendasikan lebih banyak asm, tapi mungkin 10 atau 20 baris lebih.
ini biasanya semua asm yang saya gunakan.
.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
Ya katanya cortex-m0 tapi ini bootstrap yang sebenarnya untuk kode m4 saya. Saya lebih suka ini jempol bukan jempol2. Dan saya hanya menggunakan kembali kode ini dari satu korteks-m ke yang lain, mengubah alamat penunjuk tumpukan yang diperlukan, sehingga bekerja untuk m0, m3 dan m4. Saya belum punya m7, saya juga belum banyak meneliti.
Mengaktifkan fpu mungkin memerlukan beberapa baris asm lagi karena instruksi khusus diperlukan. Tapi intinya adalah jangan bingung pemrograman tingkat rendah dan asm. C memiliki apa yang Anda butuhkan untuk mengkonfigurasi chip, serta menulis aplikasi. Perpustakaan yang Anda bicarakan ditulis dalam C bukan asm, jadi jelas mereka tidak perlu menggunakan asm juga.
Jika Anda ingin mempelajari cara kerja bagian dalam, tulis kode Anda sendiri. Jangan gunakan pustaka ini selain sebagai referensi. Terkadang lebih mudah untuk meretasnya daripada mencoba membaca kode mereka. (bukan hanya ST tetapi semua vendor. Salah satu vendor memiliki sederetan kode sehingga saya menggunakannya sebagai pertanyaan wawancara, tidak akan memposting di sini).
ST tentu saja tetapi vendor lain juga, untuk menghemat daya, memiliki jam yang memungkinkan untuk beberapa bagian dari chip, jadi sebelum Anda masuk dan mencoba untuk mengedipkan sebuah led, Anda perlu menemukan bit aktif untuk blok gpio itu dan melihat apakah itu keluar dari reset diaktifkan, jika tidak kemudian mengaktifkannya, berbicara dengan logika gpio tanpa jam memungkinkan itu hanya menggantung prosesor karena sedang menunggu respons dari logika yang tidak akan pernah merespons. Mereka tidak selalu memberi tahu Anda tentang ini memungkinkan. Setelah diaktifkan maka mereka terkadang memandu Anda melalui init untuk beberapa perangkat tertentu. Dokumen ST cukup bagus. Berasal dari microchip yang mendapat nilai buruk untuk dokumentasi, Anda seharusnya tidak memiliki masalah.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
atauDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
masing - masing.