Awal termudah dalam STM melalui "satu tempat"

Mungkin, waktu perang agama AVR melawan STM telah berlalu, tetapi tidak, tidak, ya, ada pecahnya bentrokan antara kedua kubu. Hampir semua publikasi tentang kerajinan AVR pasti akan memiliki komentar seperti "Ya, seberapa banyak Anda dapat bercinta dengan nenek Anda, sekarang saatnya untuk beralih ke STM", kemudian variasi pada subjek harga, jumlah kaki, dan timer. Jika STMshcher lebih maju, pasti akan ada indikasi bahwa tidak ada DMA di AVR dan tidak akan, karena itu AVR harus mati. Mengapa DMA blink-voltmeter-termometer sederhana, sebuah gunung pengatur waktu 16 bit, 100 kaki dan 12 bit ADC, tidak ada yang biasanya menjelaskan. Mengapa kita membutuhkan alat penuai seperti itu dalam perangkat yang Tiny13 dapat dengan mudah mengeluarkannya, yang pada saat yang sama tidak dimuat bahkan pada sepertiga dari sumber dayanya, tidak ada yang akan mengerti. Anda hanya perlu beralih ke STM32, dan hanya itu. Untuk di sini

Dan harus saya katakan, orang memiliki keinginan untuk hal baru. Tetapi sungguh, dapatkah saya mencoba? Bagaimana jika Anda menyukainya? Berikut ini hanya Referensi Manual untuk STM32F103C8T6 yang populer, yang menjadi dasar tablet Blue 1126 halaman paling masif, yang entah bagaimana itu tidak benar-benar memiliki "awal yang cepat". Bahkan utilitas terpisah, sehingga dibenci oleh para tetua “kalokub”, dan itu harus dipelajari, apa itu. Ya, dan setelah mempelajari Cube, sepertinya tidak akan dimulai dalam 5 menit, tapak yang dihasilkan olehnya bukanlah bahan bacaan yang paling mudah diakses untuk malam itu, itu hanya untuk masuk ke dahi, yang tidak semua orang bisa diskusikan.

Banyak artikel, mirip dengan yang ini, tentang awal yang cepat dan mudah di STM pantas untuk diskusi terpisah. Untuk semua artikel seperti itu, pada awalnya saya sangat bingung oleh satu keadaan. Tidak ada penjelasan terperinci tentang apa yang sebenarnya kami tulis di sini. Sekelompok tangkapan layar tentang cara membuat proyek, lalu segera tembok kode, lakukan seperti ini! Dan apa yang ada di sana, mengapa itu, mengapa demikian, di mana untuk mendapatkan semua kata-kata yang tampaknya dapat dimengerti ini, tidak ada yang menyelidiki, karena pasukan kehabisan ketika menulis manual tentang menginstal Cale dan Kuba, dan meluncurkan proyek. Hanya setelah beberapa waktu, masing-masing untuk masing-masing, pemahaman tentang apa yang terjadi dan mengapa datang. Pada gilirannya, saya mengusulkan cara untuk memulai bukan dari awal, seperti orang lain, tetapi dari akhir. Sekarang kita akan melakukan yang sebaliknya, jangan mengkonfigurasi controller, menulis kode dan memulai debutnya, tetapi segera lanjutkan ke debug,dan catat tindakan kami dalam bentuk kode.

Jadi, kami memasang Keil sebagai lingkungan bebas (hingga kode 32KB). Kami tidak akan menjelaskan tindakan ini, ini ada di Internet, dan langkah demi langkah penginstal harus dikuasai oleh orang yang masuk ke STM. Kami memulai proyek: Project-New uVision Project, membuat folder dan file proyek. Jendela pemilihan pengontrol terbuka, masukkan 103C8 ke dalam pencarian dan sepakati satu-satunya model yang dipilih.

Selanjutnya, kita sampai ke jendela pemilihan perpustakaan:



Di sini kita menempatkan tiga daw: CMSIS-CORE, Device-Startup dan Device-GPIO. Set ini cukup untuk memantulkan kaki, menerangi LED. Maka Anda masih harus mengonfigurasi, Anda tidak bisa mendapatkan apa pun dari ini. Alt + F7 meluncurkan jendela pengaturan yang terletak Pilihan Proyek untuk Target, di mana pada tab "Output" Anda perlu memeriksa kotak centang "Buat HEX-File" untuk membuat file firmware yang akan kami unggah ke controller. Selanjutnya, di tab "Debug", kami memilih ST-Link, yang, pada kenyataannya, akan memuat firmware dan debut:



Dengan tombol "Pengaturan" di sebelah jendela pilihan pemrogram, kita menuju ke jendela "Pengaturan Driver Cortex-M Target", di mana di " Unduh Flash "put a daw" Reset and Run ".

Di pohon proyek, klik kanan pada folder "Grup Sumber 1", di wizard yang terbuka, buat file main.c, di mana kami akan segera menulis kode. Di main.c yang dibuka, klik kanan pada penyertaan pertama dan paling penting:



Tambahkan kode yang terdiri dari main dan sementara tak berujung:

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	}
}

Anehnya, ini saja untuk saat ini, ini adalah program yang sudah jadi dan dapat dipahami yang mengkompilasi dan memuat dengan benar ke dalam pengontrol. Kami menekan F7 dan kami melihat bahwa firmware telah berhasil dipasang, tidak ada kesalahan atau peringatan.



Mulai saat ini, controller sepenuhnya dapat diakses oleh kami, kami dapat memasukkannya di bawah garis debug dan memelintirnya ke segala arah, dan itu akan merespons.

Tombol Ctrl + F5 menuntun kita ke debug, dan tombol "System Viewer Windows" memungkinkan Anda untuk meluncurkan windows untuk mengendalikan register register dan mengendalikan kaki-kaki GPIO.



Lebih lanjut, saya sarankan Anda masih menggunakan Manual Referensi, terutama karena Anda bahkan tidak perlu mengunduhnya, itu tersedia dengan mengklik pada tab "Buku" pada menu "Lihat":



Sekarang saya mengusulkan untuk menggunakan alasan berikut. Dari pinout pada Blue Tablet, dapat dilihat bahwa LED menggantung di kaki port 13. Banyak sumber daya Internet dan diskusi selalu menyebutkan bahwa sebelum Anda melakukan sesuatu di STM, Anda perlu mengaktifkan sesuatu, jika tidak, atur jam. Tanpa basa-basi lagi, kami menulis di kotak pencarian pembaca pdf apa yang kami butuhkan, yaitu, aktifkan port C: “PORT C CLOCK ENABLE”. Kita



masuk ke gambar berikut: Dari sini kita dapat menyimpulkan bahwa clocking port C diaktifkan dalam register IOPCEN. Dengan pengetahuan ini, kami membuka tab RCC dalam mode debug, dan memasukkan nama ini di bilah pencarian:



Tandai kotak centang yang diperlukan dengan tanda centang, dan mulai saat ini kami menganggap port C diaktifkan.

Sekarang, mengingat AVR yang telah lama menderita, kita akan mencari pengaturan pin yang sebenarnya. Agar bisa berfungsi, perlu dijelaskan apa sebenarnya yang kita inginkan darinya. Dan kami ingin melompat dengan nomor kaki 13 port C, untuk ini kita perlu mengatur mode operasinya. Di bilah pencarian di Manual Referensi, kami mengemudi di "Konfigurasi port bit", yang menyatakan keinginan kami untuk membaca di mana pengaturan leg disembunyikan. Pencarian membawa kita ke tabel dari mana mengikuti bahwa untuk menetapkan kaki sebagai output, perlu untuk mengkonfigurasi register MODE dan CNF:



Dari tabel No. 20 jelas bahwa untuk menetapkan kaki sebagai output Push-Pull, perlu mengatur ulang register CNF0 dan CNF1, dan kondisi pasangan. MODE0 dan MODE1 dijelaskan dalam tabel No. 21, saya akan memilih opsi atas, hingga 10MHz, MODE0 = 1, MODE1 = 0. Inilah yang akan saya lakukan di jendela GPIOC untuk register CNF13 dan MODE13



Sekarang kami telah mengkonfigurasi jam dan mode operasi port. Sudah waktunya untuk mencari tahu bagaimana cara melompat kaki. Dalam bahasa Inggris, atur bit port ditulis sebagai “Set bit port”, dan kami akan mencari frasa ini dalam manual:



Pencarian menuntun kami ke halaman dengan tabel, yang dengan jelas menunjukkan bahwa register BSRR, yang terdiri dari pasangan BS dan BR, bertanggung jawab untuk mengatur status kaki port , Bit set dan Bit reset, masing-masing. Kami menemukan register ini di jendela GPIOC dalam mode debug dan menikmati kontrol nomor leg 13 secara langsung dengan memasukkan jackdaws dengan mouse ke dalam kotak centang yang sesuai:



LED pada papan pil biru menggantung di antara kaki dan VCC, oleh karena itu mengendalikannya kembali ke nama register. Bit Set (register BS13) memadamkannya, dan Bit Reset (register BR13) menyalakannya. Ini adalah register operasi atom, mereka direset setelah mengatur kotak centang. Dimungkinkan untuk mengontrol kaki melalui register ODR, (klausa 9.2.4 Register data output port (GPIOx_ODR) dalam manual referensi), itu dengan jelas menunjukkan apa yang menyebabkan instalasi dan reset mengarah pada gagak.



LED hijau hijau dan redup menunjukkan bahwa semuanya berfungsi dengan benar. Tetap hanya menulis semua ini dalam bentuk kode di main.c. Di sinilah kismis muncul, yang membedakan metode ini untuk memahami pengontrol STM melalui debug dari yang lain yang seluruh internet dikotori. Saya sarankan hanya menulis ulang apa yang kita lihat di jendela debug ke dalam kode. Contoh:



Atur mode operasi port dan aktifkan clocking;



Mereka menyalakan kaki pelabuhan, menunggu, mematikannya, dan seterusnya:

#include "stm32f10x.h"                  // Device header

int main(){
	RCC->APB2ENR=0x00000010;			//  
	GPIOC->CRH=0x44144444;			//   Push-Pull  10MHz
	int i;								//     / 
	while(1){
		GPIOC->ODR=0x00002000;		//  LED,      
		i=2000000;					//    
		while (i) i--;					// 
		GPIOC->ODR=0x00000000;		//  LED
		i=2000000;					//  
		while (i) i--;					
	}
}


Tentu saja metode ini jauh dari yang terbaik dan tidak benar, tetapi menurut saya yang paling dimengerti dan sederhana. Selain itu, ia memperkenalkan untuk bekerja dengan lembar data (manual referensi) dan tidak menakut-nakuti, seperti membaca mana dan menulis footcloth kode multi-halaman untuk Blink. Ya, tidak ada lapisan abstraksi, banyak yang telah terlewatkan, tetapi saya pikir Anda dapat memaafkan ini untuk awal yang sederhana. Membaca mana dan pekerjaan yang benar dengan register kemudian, sekarang kita memiliki LED berkedip dan pada dasarnya kita mengerti bagaimana dan apa yang kita lakukan, dan yang paling penting, dari mana semua singkatan ini berasal. Jika saya pernah ditunjukkan cara mempelajari STM ini sebelumnya, mungkin saya tidak akan mengumpulkan lebih dari 9000 programmer berbeda untuk AVR di mana tidak ada debug, tetapi akan langsung digunakan di Cortex. Memang, dalam AVR tidak ada debug yang dapat dipahami dan diakses, tetapi bagaimanapun, masih terlalu dini untuk melupakan Tiny13. Dia melakukan tugasnya.

All Articles