Di sini saya akan memberi tahu Anda cara membuat proyek minimal pada CMSIS menggunakan "asli" IDE untuk mikrokontroler STM - STM32CubeIDE.
Mungkin STM32CubeIDE memiliki sejumlah kelemahan, tetapi menurut saya, memiliki beberapa keunggulan - seperti hak milik dan gratis, yang, setidaknya, Anda harus memperhatikan lingkungan pengembangan ini jika Anda belum melakukan ini sebelumnya.
Mikrokontroler STM32F072 dengan inti ARM Cortex-M0 dipilih sebagai objek firmware untuk STM32F103 yang lebih akrab pada ARM Cortex-M3, disesuaikan dengan intinya, prosesnya identik.
Semua sumber daya yang diperlukan dapat diunduh dari
st.com , dan inilah yang Anda butuhkan:
- IDE itu sendiri , saya menggunakan versi Windows, tetapi versi untuk Mac dan Linux juga tersedia
- Pustaka CMSIS untuk ARM Cortex-M0 , terletak di arsip STM32CubeFx, dipecah oleh versi kernel. Arsip itu sendiri, selain CMSIS, mengandung banyak sumber daya lain mulai dari contoh bekerja dengan periferal ke driver USB, pada kenyataannya, arsip ini digunakan jika Anda membuat proyek menggunakan STM32Cube
- Lembar Data dan Referensi Manual tidak akan sakit
Setelah menginstal, memulai dan memilih folder Workspace, Anda dapat mulai membuat proyek. Saat ini STM32CubeIDE versi 1.1.0, jadi lokasi berbagai pengaturan harus berdasarkan ini.
Membuat proyek baru -
File / Baru / STM32Project . Setelah beberapa pemikiran, jendela untuk memilih mikrokontroler muncul, dalam kasus saya itu adalah STM32F072RB dalam paket LQFP64, saya memilih garis yang diinginkan, klik berikutnya. Lebih lanjut diusulkan untuk memilih nama proyek, lokasi, bahasa pemrograman C / C ++, file executable / perpustakaan statis dan apakah proyek akan dihasilkan menggunakan CubeMX atau dengan kumis. Pembuatan kubus, dalam hal ini, tidak diperlukan, oleh karena itu tipe proyek
Kosong adalah selesai.
Di sebelah kiri, di jendela
Project Explorer , pohon proyek muncul, meskipun tidak cukup
Kosong , seperti yang diperintahkan. Pada prinsipnya, jika struktur folder yang dihasilkan cocok untuk Anda, Anda dapat menambahkan file dari pustaka CMSIS di sana dan bekerja, tetapi di sini saya akan menunjukkan bagaimana Anda dapat menyelaraskan struktur proyek dengan indra kecantikan saya, jadi semuanya kecuali skrip tautan dihapus misalnya. file dengan ekstensi .ld - itu akan berguna.
Semua manipulasi dengan folder dan file dapat dilakukan baik di Explorer maupun di dalam IDE dengan mengklik kanan pada nama proyek, misalnya:
tombol kanan -> baru -> Folder . Jika struktur proyek telah berubah di luar IDE, maka Anda hanya perlu memperbarui proyek:
tombol kanan -> Refresh .
Versi saya dari struktur proyek terlihat seperti ini:
- Startup - skrip linker akan disimpan di sini, yang tersisa dari proyek yang dihasilkan, serta file startup yang diambil dari CMSIS
- CMSIS \ src dan CMSIS \ inc - di sini akan menjadi sumber, file dengan ekstensi .c di folder scr dan file header dengan ekstensi .h di folder inc , masing-masing, terkait dengan perpustakaan CMSIS
- Core \ src dan Core \ inc - proyek itu sendiri akan berlokasi di sini, sebagai permulaan, letakkan main.c dan main.h di sana
Sekarang Anda perlu mentransfer file perpustakaan CMSIS ke proyek. Perpustakaan terdiri dari file inti dan file periferal. File kernel dimulai dengan
core_ atau
cmsis_ mereka umum untuk semua mikrokontroler yang menggunakan kernel ini. File periferal berisi nama mikrokontroler
stm32 dalam nama dan khusus untuk produsen tertentu, dalam hal ini, perusahaan STM.
Dalam formulir yang belum dibongkar, arsip berisi folder
STM32Cube_FW_F0_V1.11.0 , semua jalur relatif terhadap folder ini. Total, Anda perlu menyalin:
Dalam
CMSIS \ inc :
- Drivers \ CMSIS \ Include \ cmsis_compiler.h
- Drivers \ CMSIS \ Include \ cmsis_gcc.h
- Drivers \ CMSIS \ Include \ cmsis_version.h
- Drivers \ CMSIS \ Include \ core_cm0.h
- Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Sertakan \ stmf0xx.h
- Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Termasuk \ stm32f072xb.h
- Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Sertakan \ system_stm32f0xx.h
Dalam
CMSIS \ src :
- Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Sumber \ Templates \ system_stm32f0xx.c
Dalam Startup:
- Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Sumber \ Templat \ gcc \ startup_stm32f072xb.s
Ini adalah bagaimana proyek terlihat dalam bentuk lengkapnya.
Karena beberapa manipulasi dengan folder proyek dilakukan, Anda perlu menampilkan ini di pengaturan.
Tombol kanan untuk nama proyek -> Properti -> C / C ++ Build -> Pengaturan -> Pengaturan Alat -> MCU GCC Linker -> Umum - di sini Anda perlu menentukan lokasi baru skrip linker menggunakan tombol
Browse ...Anda juga harus menentukan path ke file proyek
Properti -> C / C ++ Umum -> TermasukProperti -> C / C ++ Umum -> Lokasi SumberDi
Termasuk jalur ke folder
inc , dan di
Lokasi Sumber akan logis untuk folder
src , tetapi jika Anda melakukannya, maka folder ini akan ditambahkan ke pohon proyek secara terpisah. Agar tidak mengacaukan pohon secara visual, di
Lokasi Sumber Anda dapat menentukan folder root
Core ,
CMSIS dan
Startup .
Agar proyek dapat dikompilasi, Anda harus menghapus tanda komentar pada baris dengan nama mikrokontroler di file
stm32f0xx.h dan, tentu saja, tambahkan fungsi utama di
main.c.Sebenarnya semuanya. Kompilasi bebas kesalahan dan segera menghilang di suatu tempat sebanyak satu setengah kilobyte memori RAM adalah RAM, dan segera tumpukan dan tumpukan diingat, mereka tidak disebutkan di mana pun dalam proses pembuatan proyek. Ukuran tumpukan dan tumpukan ditunjukkan dalam file skrip linker, yang dengan ekstensi .ld, mereka dapat dan harus diubah sesuai dengan persyaratan proyek. Nilai-nilai ini terletak di awal file dalam bentuk label
_Min_Heap_Size / _Min_Stack_Size dengan ukuran dalam heksadesimal.
Sebagai contoh, saya akan memberikan
proyek kecil LED tradisional yang berkedip.
LED akan berkedip pada papan debug STM32F072B-DISCO, clocking dilakukan dari generator HSI48 internal dengan frekuensi 48 MHz, dan timer SysTick digunakan sebagai sumber penundaan, menghasilkan interupsi dengan periode 1 ms, dimana waktu tunda yang tepat dihitung. LED terhubung ke pin 6 port C, dikonfigurasi untuk output push-pull.
Saya harap informasi ini bermanfaat bagi seseorang, karena Pada suatu waktu, meskipun banyak materi pemrograman STM32, saya harus menyekop banyak manual untuk menyadari hal-hal yang sekarang tampak jelas.