Memulai Mempelajari STM32 atau Mengelola Cahaya dengan Cerdas

Pengantar kecil


Suatu ketika, ketika saya pergi ke apartemen sewaan berikutnya, saya menemukan ketidaknyamanan tertentu yang cukup mengganggu: saklar lampu di ruang utama ternyata berada di belakang kabinet dinding, yang disekrup ke dinding, dan pengaturan ulang tidak mungkin karena butuh banyak waktu dan usaha. Saya sangat ingin menyelesaikan masalah ini dan satu pikiran muncul di benak saya: membuat remote control untuk mengontrol pencahayaan!

Itu dengan ide membuat remote control saya sendiri untuk mengendalikan cahaya di ruangan yang saya sukai untuk elektronik, mikrokontroler, dan berbagai perangkat radio dimulai.

Daftar artikel:
  1. Memulai Mempelajari STM32 atau Mengelola Cahaya dengan Cerdas
  2. Memulai STM32: Operasi Bit
  3. Memulai STM32: Apa itu Register? Bagaimana cara bekerja dengan mereka?


Setelah itu, saya mulai mempelajari topik ini, berkenalan dengan dasar-dasar elektronik, contoh-contoh perangkat, dan belajar bagaimana orang mengimplementasikan perangkat tersebut. Setelah mencari informasi tentang cara mulai mempelajari mikrokontroler, saya menemukan apa itu Arduino, apa yang mereka makan, bagaimana cara bekerja dengan mereka. Solusi mudah terlihat sangat menarik, karena sejauh yang saya mengerti pada saat itu, kode akan dibangun sekali atau dua kali. Tetapi setelah menyimpulkan bahwa saya tidak tahu apa yang terjadi di dalam mikrokontroler di luar sketsa Arduino, saya memutuskan untuk mencari opsi yang lebih menarik, yang menyiratkan studi mendalam dan pencelupan di hutan teknologi mikrokontroler.

Perusahaan tempat saya bekerja memiliki departemen pengembangan, dan saya memutuskan untuk menghubungi para insinyur untuk mengarahkan saya ke jalan yang benar dan menunjukkan di mana harus mulai menyelesaikan masalah saya. Saya sangat berkecil hati untuk mempelajari Arduino dan di tangan saya ada syal hijau yang tidak diketahui dan tidak dapat dipahami di mana terdapat prasasti, surat, berbagai komponen elektronik.


Semua ini bagi saya pada saat itu tampak sangat rumit, dan saya bahkan menjadi bingung, tetapi saya tidak akan menolak untuk melaksanakan tugas itu. Jadi saya berkenalan dengan keluarga mikrokontroler STM32 dan papan STM32F0-Discovery, setelah mempelajari yang saya ingin menumpuk perangkat saya untuk keperluan yang saya butuhkan.

Yang sangat mengejutkan saya, komunitas besar, artikel, contoh, berbagai materi tentang STM tidak sama banyaknya dengan Arduino. Tentu saja, jika Anda mencari, ada banyak artikel "untuk pemula" yang menggambarkan bagaimana dan di mana untuk memulai. Tetapi pada saat itu saya merasa bahwa semua ini sangat rumit, banyak detail yang menarik bagi pikiran pemula yang ingin tahu, semuanya tidak diceritakan. Meskipun banyak artikel dikategorikan sebagai "belajar untuk yang terkecil", tidak selalu mungkin untuk mencapai hasil yang diinginkan dengan bantuan mereka, bahkan dengan contoh kode yang sudah jadi. Itulah sebabnya saya memutuskan untuk menulis serangkaian artikel pendek tentang pemrograman pada STM32 mengingat penerapan ide tertentu: panel kontrol pencahayaan di ruangan.

Mengapa tidak AVR / Arduino?


Mengantisipasi pernyataan bahwa akan terlalu dini bagi pemula yang tidak berpengalaman untuk segera mempelajari studi yang kompleks seperti MK seperti STM32 - Saya akan memberi tahu Anda mengapa saya memutuskan untuk pergi dengan cara ini tanpa masuk dan berkenalan dengan keluarga prosesor Atmel dan bahkan tidak mempertimbangkan Arduino sebagai pilihan. .

Pertama, hubungan harga-fungsional memainkan peran yang menentukan, perbedaannya terlihat bahkan antara salah satu MK yang termurah dan paling sederhana dari ST dan ATMega yang agak “gemuk”:


Setelah saya melihat perbedaan yang signifikan antara harga dan kemampuan AVR dan STM32 - saya memutuskan bahwa saya tidak akan menggunakan AVR dalam pengembangan saya =)

Kedua, saya sebelumnya mencoba sendiri untuk menentukan serangkaian keterampilan yang akan saya terima pada saat saya mencapai hasil yang diinginkan. Jika saya memutuskan untuk menggunakan Arduino - itu akan cukup bagi saya untuk menyalin perpustakaan yang sudah jadi, memakai sketsa dan voila. Tetapi pemahaman tentang bagaimana bus digital bekerja, bagaimana pemancar radio bekerja, bagaimana semuanya dikonfigurasi dan digunakan - dalam situasi ini, saya tidak akan pernah datang. Bagi saya sendiri, saya memilih jalan yang paling sulit dan sulit, sehingga di jalan untuk mencapai hasil - saya akan mendapatkan pengalaman dan pengetahuan maksimal.

Ketiga, STM32 apa pun dapat diganti oleh STM32 lain, tetapi dengan fitur yang lebih baik. Apalagi tanpa mengubah rangkaian switching.

Keempat, orang-orang dengan pengembangan profesional lebih cenderung menggunakan MK 32-bit, dan paling sering mereka adalah model dari NXP, Texas Instruments, dan ST Microelectronics. Ya, dan saya kapan saja dapat mengunjungi teknisi saya dari departemen pengembangan dan mencari tahu bagaimana menyelesaikan masalah tertentu dan mendapatkan saran tentang masalah yang menarik minat saya.

Mengapa mulai menjelajahi mikrokontroler STM32 dengan papan Discovery?


Seperti yang sudah Anda pahami, kami akan mulai berkenalan dan mempelajari mikrokontroler STM32, pembaca yang budiman, dengan menggunakan papan Discovery. Mengapa Discovery, dan bukan papannya sendiri?

  1. Pada papan Discovery apa pun, terdapat program / debugger ST-LINK bawaan yang terhubung ke komputer melalui USB dan dapat digunakan baik untuk memprogram mikrokontroler di papan dan perangkat eksternal dengan menghapus / memasang jumper yang sesuai. Artinya, nilai tambah untuk semuanya - kami juga menghemat uang dengan mendapatkan solusi dua-dalam-satu: mikrokontroler dan programmer.
  2. Kartu Discovery memiliki kabel lengkap semua pin langsung dari mikrokontroler ke pin papan. Untuk kenyamanan, saya memasukkan Discovery ke dalam dua papan prototyping yang sama.
  3. 3. Di papan tulis selalu ada sejumlah tertentu semua jenis perangkat periferal, misalnya, seperti akselerometer, mikrofon, display, sensor, dan banyak lainnya. Papan Discovery yang berbeda memiliki opsi body kit yang berbeda. Jika ada yang tertarik, Anda dapat membaca lebih lanjut di situs web pabrikan.

Apa yang kita butuhkan untuk pengembangan selain papan Discovery?


Dalam pekerjaan kami dengan papan Penemuan, kami akan membutuhkan sejumlah hal tak tergantikan yang tidak dapat kami lakukan tanpa:

  1. Papan sirkuit untuk melihat di mana, di mana dan apa yang terhubung. Anda dapat mengambil sirkuit pada halaman produsen motherboard Anda di bagian Paket Skema. Anda dapat mengunduh skema dengan menggulir halaman sedikit lebih rendah pada blok yang ditunjukkan pada gambar:
  2. Lembar data ke mikrokontroler kami sehingga setiap saat Anda dapat melihat pinout, spesifikasi, parameter, dan informasi lain yang diperlukan untuk bekerja. Dalam kasus saya itu adalah STM32F051R8T6 . Tautan datasheet ada di judul halaman:
  3. Kami juga membutuhkan manual Referensi pada mikrokontroler kami. Ini adalah dokumen di mana metode dan pendekatan untuk bekerja dengan inti MK, dengan blok jamnya, dengan periferal, dll. Dijelaskan secara rinci. Ini juga berisi deskripsi semua register MK, semua opsi dan pengaturan MK dan periferal. Ini mungkin file paling penting yang tanpanya akan sangat sulit untuk mengetahui bagaimana dan apa yang berfungsi di dalam MK. Anda dapat mengunduh file dari tautan di halaman mikrokontroler:
  4. Dan akhirnya, kita perlu membangun lingkungan pengembangan di mana kita dapat membuat program untuk MK kita dan dengan tenang menyusun dan menginstal program kita. Pada suatu waktu, saya mencoba hampir semua IDE paling populer dan memilih Keil uVision 5. Menurut pendapat saya, lingkungan pengembangan ini bagi saya adalah yang paling nyaman dan mudah dipelajari. Debugger bawaan, perpustakaan tingkat rendah yang siap pakai dan mudah dihubungkan, sejumlah besar contoh dan antarmuka kerja yang terorganisir dengan baik dan ruang IDE adalah faktor penentu yang memengaruhi pilihan saya. Anda dapat mengunduh IDE ini dari situs resmi , tetapi pendaftaran sederhana diperlukan:. Sebenarnya ada satu batasan kecil pada ukuran firmware yang diunduh di 32kB sejak itu IDE ini dibayar. Tetapi ini akan lebih dari cukup bagi kita. Kami akan membutuhkan MDK-Arm:

Mari kita mulai dengan pengaturan awal dan persiapan IDE untuk bekerja!


Setelah mengunduh file instalasi IDE kami, Anda dapat melanjutkan dengan instalasi. Ikuti instruksi penginstal untuk menyelesaikan proses instalasi. Setelah semua file yang diperlukan untuk operasi disalin, sebuah jendela untuk penginstal perangkat lunak untuk mengembangkan Penginstal Paket akan muncul. Pemasang ini berisi pustaka tingkat rendah, Middleware, contoh program yang diperbarui dan diperbarui secara berkala.


Untuk mulai bekerja dengan board kita, kita perlu menginstal sejumlah paket yang diperlukan untuk bekerja dan kita perlu menemukan mikrokontroler yang dengannya kita akan bekerja. Anda juga dapat menggunakan pencarian di bagian atas jendela. Setelah kami menemukan MK kami, klik di bagian kedua jendela dan kami perlu menginstal daftar pustaka berikut:

  1. Keil :: STM32F0xx_DFP adalah paket perangkat lunak lengkap untuk keluarga mikrokontroler tertentu, termasuk manual, lembar data, file SVD, perpustakaan dari pabrikan.
  2. ARM :: CMSIS adalah paket Standar Antarmuka Perangkat Lunak Mikrokontroler Cortex, yang mencakup kumpulan perpustakaan lengkap dari ARM untuk mendukung inti Cortex.
  3. Keil :: ARM_Compiler adalah kompiler terbaru untuk ARM.

Setelah menginstal paket yang diperlukan, Anda dapat melanjutkan untuk mengkonfigurasi IDE dan debugger / programmer kami. Untuk melakukan ini, kita perlu membuka jendela Keil utama dan membuat proyek baru.

Untuk melakukan ini, buka menu Project -> New uVision Project dan pilih folder tempat kami akan menyimpan proyek kami.

Setelah Keil akan bertanya kepada kami MK mana yang akan digunakan dalam proyek ini. Pilih MK yang diinginkan dan klik OK .


Dan sebuah jendela akan muncul lagi, sudah akrab bagi kita, di mana kita dapat menghubungkan modul-modul yang menarik ke proyek. Untuk proyek kami, kami membutuhkan dua modul:

  1. Inti dari perpustakaan CMSIS , di mana pengaturan, mendaftarkan alamat dan banyak lagi yang diperlukan untuk pekerjaan MK kami dinyatakan.
  2. File startup , yang bertanggung jawab untuk inisialisasi MK pada saat startup, deklarasi vektor dan interrupt handler, dan banyak lagi.

Jika semua dependensi plug-in terpenuhi, manajer akan memberi sinyal ini kepada kami dalam warna hijau:


Setelah kita menekan tombol OK, kita dapat mulai membuat proyek kita.

Untuk mengonfigurasi parameter proyek dan mengonfigurasi programmer kami, klik kanan pada Target 1 untuk membuka menu yang sesuai.


Di menu utama proyek, atur parameter Xtal ke 8.0 MHz . Parameter ini bertanggung jawab atas frekuensi operasi osilator kuarsa dari MK kami:


Selanjutnya, kita lanjutkan mengkonfigurasi programmer / debugger kami. Di jendela yang sama, klik pada tab Debug dan pilih parameter ST-Link Debugger di bidang Use dan pergi ke pengaturan:


Dalam pengaturan, kita akan melihat model ST-Link kita terpasang di papan, nomor seri, versi HW dan IDCODE MK yang akan kita flash:



Untuk kenyamanan, Anda dapat mengkonfigurasi parameter yang bertanggung jawab atas kenyataan bahwa MK diatur ulang secara otomatis setelah flashing. Untuk melakukan ini, periksa bidang Reset dan Jalankan .


Setelah itu, Anda perlu mengonfigurasi opsi lain yang akan memungkinkan kami untuk menulis komentar berbahasa Rusia pada kode proyek kami. Kami mengklik tombol Konfigurasi dan di menu yang terbuka, pilih Rusia Windows-1251 di bidang Pengkodean .


Itu saja. IDE dan programmer kami siap berangkat!

Keil memiliki navigator proyek yang nyaman di mana kita dapat melihat struktur proyek, bahan referensi yang diperlukan untuk pekerjaan, termasuk yang sudah kita unduh ke komputer kita sebelumnya (Skema penemuan, lembar data, referensi manual), daftar fungsi yang digunakan dalam proyek dan template untuk penyisipan cepat konstruksi bahasa yang berbeda dari bahasa pemrograman.


Ganti nama folder dalam struktur proyek dari Source Group 1 ke App / Pengguna , yang mengindikasikan bahwa kita akan memiliki file program pengguna di folder ini:


Tambahkan file program utama melalui navigator proyek dengan menjalankan perintah Tambah Item Baru ke Grup “Aplikasi / Pengguna” .


Anda harus memilih File C (.c) dari daftar dan memberinya nama main.c :


File yang dibuat akan secara otomatis ditambahkan ke struktur proyek dan akan terbuka di jendela program utama.

Nah, sekarang kita bisa mulai membuat program kita.

Pertama-tama, Anda perlu menghubungkan dokumen header keluarga mikrokontroler kami ke file yang dapat dieksekusi. Tambahkan baris berikut ke file main.c , program ini akan membuat LED berkedip secara bergantian:

/*      */
#include "stm32f0xx.h"

/*    */
int main(void)
{
	/*     GPIO */
	RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
	
	/*     PC8  PC9  Output*/
	GPIOC ->MODER = 0x50000;
	
	/*  Output type   Push-Pull */
	GPIOC->OTYPER = 0;
	
	/*      Low */
	GPIOC->OSPEEDR = 0;
	
	while(1)
	{
		/*   PC8,  PC9 */
		GPIOC->ODR = 0x100;
		for (int i=0; i<500000; i++){}	//  
					
		/*   PC9,  PC8 */
		GPIOC->ODR = 0x200;
		for (int i=0; i<500000; i++){}	//  
	}		
}

, , . :


Build ( F7) , , :


Load ( F8) :


, .


! STM32 ! , , , Discovery. )

:
  1. STM32 -
  2. STM32:
  3. STM32: ? ?

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


All Articles