Jadi, pekerjaan mandrigal ini didorong oleh ketiadaan instruksi langkah-demi-langkah yang hampir lengkap menggunakan alat yang biasa ditawarkan oleh STMicroelectronics.
Sejumlah besar bootloader yang ditemukan di jaringan, kadang-kadang sangat sibuk, sayangnya "dipertajam" untuk kristal tertentu.
Materi yang diusulkan berisi prosedur untuk menggunakan paket CubeMX, "bootloader" DfuSeDemo dan utilitas persiapan firmware manajer file Dfu, yaitu, kami abstrak Daftar Keinginan kami dari perangkat keras, maafkan assembler makro dan guru lembar data.
Memasak lingkungan ...
Kita perlu CubeMX sendiri, unduhan file manager DfuSeDemo + Dfu, semuanya dalam paket yang sama, STM32 ST-LINK Utility, kami menemukan semuanya di situs web STMicroelectronics gratis.
Tongkat eksperimental kami dengan chip STM32F103C8T6 Paman Liao

dan programmer ST-Link dari sana.

Nah, IDE favorit Anda, dalam presentasi khusus ini kami menggunakan KEIL, pengaturan kompilasi di IDE lain tidak jauh berbeda.
Jadi ayo pergi ...
Luncurkan CubeMX dan pilih kristal Anda ...

Rayakan Wishlist Anda ...

Dalam tugas khusus ini, kami mengaktifkan perangkat USB โ Device FS dan, dengan demikian, Perangkat USB โ DownLoad Memperbarui kelas Firmware, dan RCC yang tak terlupakan โ Jam Kecepatan Tinggi โ Cristal / Ceramic Resonator adalah yang ada di papan.
Selanjutnya, pilih sakelar mode bootloader-a, dalam contoh ini, cukup gunakan jumper boot1 yang ada.

Kami melihat skema kecil dan, sesuai dengannya, boot1 dilampirkan ke kaki PB2, jadi kami menggunakannya dalam mode GPIO_Input.
Selesai, aktifkan tab Konfigurasi Jam dan mulai mesin pemilihan konfigurasi.

Lompat ke tab Cofiguration ...

Pilih tombol GPIO ...

Dan di lapangan ...

tulis label khusus, biarlah boot1.
Selanjutnya, siapkan proyek ...

Pilih Proyek โ Pengaturan ...

Pilih dan isi ....

Oleh karena itu, kami memilih IDE Cub yang akan kami buat proyeknya, dalam kasus kami, MDK-ARM V5.
Tab Pembuat Kode dalam perwujudan ini akan tetap tidak berubah ...

Nah, itu saja, kami memulai pembuatan proyek Project โ Generate Code

Pada akhirnya, Cub akan meminta Anda untuk segera meluncurkan IDE Anda ... apa yang harus Anda lakukan.


Kami memulai kompilasi dan perakitan dan memuat ke dalam kristal ... F7, F8 ...

Hasil akhirnya ...
Kami mengganti pin di papan kami ke mode operasi dan menghubungkan kabel USB ...


Buka panel kontrol di Windows โ sistem โ manajer perangkat โ USB controller. Dan lihat daftar perangkat, Windows akan sedikit berbunyi dan menginstal Perangkat STM di driver Mode DFU (jika belum).
Jadi, pengemudi bangkit dan memutuskan, mulai "boot" DfuSeDemo ...

Kami melihat apa yang kami tangkap Perangkat DFU dan klik dua kali pada bidang Pilih Target ...

Kami dengan hati-hati melihat dan mengagumi bahwa kilat hingga alamat 0x0800C000 ditutup untuk penulisan dan kami menulis alamat ini, kami membutuhkannya ...
Ngomong-ngomong, saya mencobanya di STM32F407VE, di mana memori terbuka untuk merekam dari 0x08000000, yaitu, sejak awal ... mengapa, dalam versi kami, tidak jelas, tidak menggali, dikubur di suatu tempat, tetapi jelas tidak ditulis, tidak ada tertulis, karena sebagian besar menghilang tanpa pemilik ... mungkin seseorang akan memberi tahu Anda di mana untuk menggali ...
Jadi, "potongan rambut baru saja dimulai" ...
Kami hanya membutuhkan dua file sumber ...

Kami membukanya di IDE dan kami benar, kami menambahkan ...
Kami memperhitungkan bahwa CubeMX TIDAK BERSAMA ketika membuat ulang insert antara USER CODE BEGIN dan USER CODE END ... di sana kami akan memasukkan tambahan kami ...
Mari kita mulai dengan main.c
typedef void (*pFunction)(void); pFunction JumpToApplication; uint32_t JumpAddress; . . . uint32_t AddressMyApplicationBegin = 0x0800C000; uint32_t AddressMyApplicationEnd = 0x0800FBFC; . . . if(HAL_GPIO_ReadPin(boot1_GPIO_Port, boot1_Pin ) == GPIO_PIN_SET) { if (((*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD) & 0x2FFE0000) == 0x20000000) { JumpAddress = *(__IO uint32_t *) (USBD_DFU_APP_DEFAULT_ADD + 4); JumpToApplication = (pFunction) JumpAddress; __set_MSP(*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD); JumpToApplication(); } } MX_USB_DEVICE_Init(); . . .
itu saja dengan main.c ...
buka usbd_conf.h dan ke
#define USBD_DFU_APP_DEFAULT_ADD 0x0800000
ingatkan ...
#define USBD_DFU_APP_DEFAULT_ADD 0x080C000
kita beralih ke usbd_dfu_it.c, di sini lebih lanjut ....
. . . extern uint32_t AddressMyApplicationBegin; extern uint32_t AddressMyApplicationEnd; . . . #define FLASH_ERASE_TIME (uint16_t)50 #define FLASH_PROGRAM_TIME (uint16_t)50 . . . , ยซยป โฆ uint16_t MEM_If_Init_FS(void) { HAL_StatusTypeDef flash_ok = HAL_ERROR;
Sebenarnya itu saja ...
Kami menghubungkan programmer, melempar jumper ke mode pemrograman, F7, F8 dan botloader direkam ...
Bisakah saya menggunakan ...
Sekarang kita akan menyiapkan aplikasi untuk memuat melalui bootloder ...
Aplikasi favorit akan berkedip LED ...
Kami menyiapkan dan men-debug aplikasi, dan mengubah masing-masing tempat di kompiler dan badan program untuk mengubah alamat peluncuran program dan mengganggu vektor ...
Yaitu di KEIL โ Konfigurasi โ Alat Flash

Ubah alamat awal program ...

Kami mengatakan untuk menghasilkan file HEX

dan ubah alamat tabel vektor ...
mengumpulkan program F7 ...
mengkonversi HEX yang diterima menjadi file dfo menggunakan utilitas manajer file Dfu ...

pilih file HEX kami dengan tombol S19 atau HEX ... dan klik Hasilkan ...

kami mendapatkan file dfu.
Sebenarnya semuanya sudah siap.
Memuat ke pengontrol ...
Kami menghubungkan papan eksperimental kami dengan botloader yang sudah dimuat ke USB, setelah mengatur jumper ke Mode DFU.

Anda dapat mengontrol tampilan Perangkat STM dalam Mode DFU dalam daftar perangkat.
jalankan "bootloader".

katakan padanya file dfu kami ...

Kami menekan Upgrade dan kami amati hasil pemuatan ... untuk kepercayaan diri, kami tekan cek.

semuanya berhasil ... Anda dapat menjalankan ...
jika kesalahan keluar, itu berarti suatu tempat ...

misalnya ...
Jadi, kami akan menganggap bahwa semuanya berhasil ... alihkan jumper ke mode aplikasi

dan nikmati diode yang berkedip ...
...
Uhhhh Begitu banyak bukoffff. Bosan menyalin foto :-)
Terima kasih atas perhatiannya ...