
Dalam proyek saya, saya menggunakan
mikrokontroler STM32F103C8 dan
kerangka stm32duino . Klon Arduino ini menawarkan bootloader khusus yang memungkinkan Anda untuk mengunggah firmware melalui USB, tanpa menggunakan komponen eksternal seperti ST-Link atau adaptor USB-UART.
Hari ini saya perlu bekerja dengan controller kosong dari bawah CooCox dan tanpa stm32duino. Tapi ini masalahnya. Bahkan bola lampu tanda bahaya sederhana yang dituangkan melalui bootloader ini tidak berfungsi.
Mari kita perbaiki. Mungkin kalkulasi saya bagi sebagian orang tampak biasa. Tapi saya baru mulai mempelajari pengontrol STM32 dan membunuh setidaknya setengah hari untuk menemukan masalah. Tiba-tiba artikel ini akan mempersingkat waktu pengembangan untuk seseorang.
Saya tidak menentang ST-Link dan para penentang lainnya. Tetapi di perangkat saya yang sudah jadi tidak akan, tetapi pasti akan ada USB. Mengapa tidak segera meletakkan kemampuan untuk memperbarui firmware melalui USB? Secara pribadi, saya menemukan metode ini nyaman. terlebih lagi, saya sudah memiliki kabel yang terhubung dengan yang ada daya dan USB Serial.
Mari kita lihat bagaimana bootloader bekerja. Untuk memulai dengan contoh pengontrol AVR. Mengapa saya mengingatnya? Saya beralih dari Arduino dan secara tidak sadar mengharapkan perilaku yang sama. Tetapi dalam STM32 semuanya ternyata berbeda. Oleh karena itu, saya ingin berbicara tentang perbedaan antara kedua mikrokontroler ini.
Jadi Dalam mikrokontroler AVeg ATMega, sejumlah memori dapat dicadangkan untuk bootloader di dekat akhir flash. Menggunakan bit sekering Anda dapat mengontrol dari mana alamat program akan dimulai. Jika tidak ada bootloader, program dimulai dari alamat 0x0000. Jika ada bootloader, itu dimulai dari beberapa alamat lain (misalnya, di ATMega32 dengan 0x3C00, jika ukuran bootloader adalah 2k).
Ketika bootloader telah melakukan tugasnya, ia mentransfer kontrol ke program utama dari alamat 0x0000. Yaitu program selalu dimulai pada 0x0000. Compiler dan linker bekerja dengan fakta bahwa kode tersebut akan ditempatkan di awal ruang alamat.
Dalam mikrokontroler STM32, ini tidak benar. Semua program dimulai dari alamat 0x0800000. Bootloader tidak terlalu istimewa. Ini adalah program yang sama yang dimulai dari alamat awal yang sama. Dalam prosesnya, bootloader dapat menerima firmware (melalui USB atau UART, membaca dari USB flash drive, menerima dari satelit, mendapatkannya dari subruang, apa pun ...) dan menulisnya ke alamat yang lebih tinggi dari bootloader itu sendiri. Dan, tentu saja, di akhir pekerjaannya, transfer kontrol ke program utama.
Jadi ketika mengkompilasi firmware Anda perlu tahu di mana bootloader akan menulis firmware dan menyesuaikan alamatnya.
Itu semua dengan teori. Mari kita lanjutkan berlatih. Di bawah ini adalah petunjuk langkah demi langkah tentang cara mengencangkan bootloader USB ke mikrokontroler seri STM32F1xx, dan mungkin juga ke beberapa yang lain.
Namun, ada beberapa batasan pada sirkuit. Di sini, sayangnya, saya tidak kuat. ITP membutuhkan resistor pull-up 1,5k untuk port PA12 (alias USB D +). Ini memungkinkan bootloader untuk terhubung dan memutuskan koneksi dari USB pada waktu yang tepat.
Instruksi:
Sedikit nuansa. Sebelum mengunggah firmware, Anda harus menjalankan bootloader. Cara termudah adalah dengan menekan tombol reset. Setelah itu, bootloader akan mulai dan akan menunggu beberapa detik untuk firmware. Jika tidak ada yang memulai maple_upload saat ini, bootloader akan mentransfer kontrol ke firmware utama.
Agar tidak menekan reset setiap kali, papan berbasis libmaple / stm32duino menggunakan trik. Mereka mendengarkan port serial usb. Jika sinyal DTR muncul di sana dan urutan kunci byte ditransmisikan, maka mikrokontroler dimuat kembali ke dalam bootloader. Lihat
ke dalam fungsi rxHook () .
Ini dapat menyebabkan ketidaknyamanan. Jika mikrokontroler dimatikan dan hang, maka ia tidak lagi mendengarkan port. Karena itu, ia tidak dapat mendengar urutan tombol dan reboot ke bootloader. Kemudian hanya mengatur ulang untuk membantu.
Itu saja. Saya harap artikel saya akan menjelaskan bagaimana bootloader bekerja di STM32 dan cara mengunduh firmware melalui port USB. Sayangnya, ambang entri masih tinggi, tetapi tiba-tiba artikel saya akan membantu seseorang mengatasinya.