STM32 mulai cepat. Bagian 2 Hello World di HAL, debugging di Atollic TrueSTUDIO

Terakhir kali kami menguasai pembuatan proyek baru menggunakan STM CubeMX, bagian pertama dapat ditemukan di sini.

Bagi mereka yang terlalu malas untuk membaca ulang - itu semua berakhir dengan fakta bahwa proyek kosong berhasil dirakit.



Pada bagian ini, kita akan menulis contoh Hello World paling sederhana di HAL, melihat bagaimana menjalankan dan menggunakan debugger, dan mari kita cari tahu berapa banyak memori yang dimakan oleh program kita, yang pada bagian ini akan ditulis dalam HAL.

Kami mengambil sebagai dasar proyek kosong yang sama yang diinisialisasi di bagian terakhir.

Untuk mengedipkan LED - kita harus mematuhi algoritma berikut:

  1. Atur status terbalik ke yang sekarang pada kaki mikrokontroler. Artinya, ada 0 - set 1, ada 1 - set 0, dan sebagainya.
  2. Tunggu N untuk jumlah mikrodetik dan kembali ke langkah 1.

Untuk memenuhi poin pertama, kita perlu memberi tahu kompiler tentang pin dan port mana LED terhubung dan fungsi mana untuk membalikkan keadaannya.

Pertama-tama kami menemukan di mana kami menghubungkan LED.

Dalam file main.c, segera setelah komentar pengantar bahwa perusahaan ST dengan ramah menulis kepada kami, ada garis untuk menghubungkan file header main.h



Klik kanan pada baris ini dan temukan item Buka Deklarasi



Dengan mengkliknya, kita akan pindah ke file main.h

Di mana menemukan pin dan nama port yang kami nyatakan.



Ingat, pada bagian pertama, saat menginisialisasi output LED PC13, kami mengisi bidang Label Pengguna dan memasukkan CLOCK_LED di sana?

Saat membuat proyek, STM32CubeMX memperhitungkan keinginan kami dan sekarang, bukannya GPIO_PIN_13 abstrak dan GPIOC, kami dapat mengakses LED kami melalui CLOCK_LED_Pin dan CLOCK_LED_GPIO_Port yang lebih mudah dimengerti.

Dengan itu - apa yang akan kita kelola - menemukan.

Sekarang kami sedang mencari fungsi yang dapat mengubah kondisi GPIO kami menjadi sebaliknya.
Untuk melakukan ini, di pohon proyek di sisi kiri layar - cari file:

Drivers -> STM32F1xx_HAL_Driver -> Inc -> stm32f1xx_hal_gpio.h 

Ada banyak hal, tetapi kita membutuhkan deskripsi fungsi yang ada di blok / * Fungsi yang diekspor * /

Temukan fungsinya di sana

 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 

Ini yang kita butuhkan.



Agar LED berkedip terus-menerus, perlu untuk menempatkan panggilan fungsi kita di utama dalam tubuh loop program utama.

Dan untuk membedakan antara blinks - tambahkan setelah itu penundaan menggunakan fungsi HAL_Delay (500);

Dalam hal ini, penundaannya adalah 500 ms.



Omong-omong, fungsi HAL_Delay juga dijelaskan dalam

 Drivers -> STM32F1xx_HAL_Driver -> Inc 

hanya dalam file stm32f1xx_hal.h
Artinya, untuk mengedipkan LED - kita hanya perlu menulis 2 baris kode.
Jika kami melakukan semuanya dengan benar, Anda dapat mencoba menjalankan debugger dan melihat bagaimana program berjalan.





Anda dapat menavigasi kode program menggunakan tombol F5 dan F6
Pada saat yang sama, tombol F6 hanya menginjak panggilan fungsi, dan tombol F5 memungkinkan Anda untuk masuk ke fungsi yang dipanggil dan melihat apa yang terjadi di dalamnya.



Satu-satunya hal jika Anda tidak ingin menangkap gangguan selama debugging adalah saya menyarankan Anda untuk mematikan optimasi. Ini dilakukan melalui menu Project -> Properties

Nilai Level Optimasi harus ditetapkan ke Tidak Ada (-O0)



Setelah menghentikan debugging, controller akan me-restart kode lagi dan akan menjalankannya secara siklis.

Hasilnya harus seperti ini.



Untuk meringkas


Menggunakan HAL memungkinkan kami untuk mengimplementasikan tugas ini dengan menulis hanya 2 baris kode.

Tetapi untuk penyederhanaan pekerjaan itu perlu untuk membayar dengan memori



RAM 1,54 KB dan flash 4,69 KB.

Biarkan saya mengingatkan Anda bahwa optimasi dinonaktifkan, yaitu, "-O0"

Apakah banyak atau sedikit?

Pertanyaan ini dapat dijawab dengan percaya diri hanya di bagian artikel berikut ini.

Artikel asli ada di blog saya seperti biasa.

Source: https://habr.com/ru/post/id481436/


All Articles