Penguasaan pantas mikropengawal STM32. Menentukan alamat daftar khas

Artikel ini, yang merupakan satu lagi "permulaan pantas" dalam menguasai pengawal ARM, mungkin akan membantu anda mengambil langkah pertama dalam menguasai pengawal ARM 32-bit berdasarkan teras Cortex-M3 - siri STM32F1xxx. Mungkin artikel ini (yang muncul mengenai topik ini seperti cendawan selepas hujan) akan berguna untuk seseorang.

pengenalan

Kenapa ARM?
1. Terdapat banyak pilihan (pengilang yang berbeza hari ini menghasilkan lebih daripada 240 pengawal ARM)
2. Harga rendah(contohnya, untuk $1 anda boleh mendapatkan 37xI/O, 16K Flash, 4K RAM, 2xUART, 10x12bitADC, 6x16bitPWM).

Mari mulakan kerja kita dengan pengawal daripada ST Microelectronics. Pengawal berdasarkan teras ARM Cortex-M3 dicirikan oleh pelbagai peranti persisian, tahap ciri prestasi yang tinggi dan harga yang rendah
P.S. Pada mulanya, nampaknya ARM adalah sejenis makhluk yang dahsyat (dalam pematerian, pendawaian, pengaturcaraan). Tetapi ini hanya pada pandangan pertama :) dan anda akan melihatnya sendiri.

Jadi, kami akan mengkaji ARM menggunakan contoh pengawal STM32F1. Pada masa yang sama, siri ini mempunyai beberapa baris:

  • Talian nilai STM32F100 - CPU 24 MHz, kawalan motor, CEC.
  • Talian akses STM32F101 - 36 MHz CPU, sehingga 1 MB Flash
  • Talian capaian USB STM32F102 - CPU 48 MHz dengan USB FS
  • Barisan prestasi STM32F103 - 72 MHz, sehingga 1 MB Denyar, kawalan motor, USB, CAN
  • Talian kesambungan STM32F105/107 - CPU 72 MHz, Ethernet MAC, BOLEH, USB 2.0 OTG

Terdapat juga klasifikasi berikut:

Pengawal STM32 boleh dipaksa untuk but dari 3 kawasan memori (bergantung pada keadaan pin BOOT0 dan BOOT1 apabila pengawal dimulakan atau selepas ia ditetapkan semula). Anda boleh menulis program ke memori pengawal dengan cara berikut:

1 cara:
Menggunakan pemuat but (ia sudah ditulis ke memori sistem) dan USART1(USART2 dipetakan semula): Menggunakan isyarat jam 8 MHz dalaman. Untuk melancarkan pemuat but terbina dalam yang disambungkan ke dalam pengawal oleh pengilang, anda hanya perlu membuang isyarat daripada penukar RS232-3.3V (contohnya, berdasarkan FT232RL) ke kaki pengawal TX1, RX1 dan sebelum set itu BOOT0 = 1 dan BOOT1 = 0, tekan RESET dan kita boleh menjahit program dalam pengawal. Dan ia dijahit Program kilat Loader Demonstartor oleh STM (untuk Windows).

PS. Jika anda menjalankan LINUX dan tidak mempunyai papan penyahpepijatan jenis penemuan, anda boleh memuat naik perisian tegar ke pengawal melalui rs-232 kegemaran semua orang (sebenarnya, melalui penukar rs-232-3.3V). Untuk melakukan ini, anda perlu menggunakan skrip python (Ivan A-R) (untuk LINUX atau MACOSX).
Pertama, anda mesti memasang Python 2.6 dan perpustakaan untuk bekerja dengan port bersiri - perpustakaan PySerial.
Sekarang, untuk menjalankan skrip stmloader.py (dari terminal, sudah tentu), anda perlu mengubahnya sedikit agar sesuai dengan komputer anda: bukanya dalam editor teks.
Merekrut di baris arahan
~$ dmesg | grep tty
untuk melihat semua port bersiri PC.
dan selepas menaip...
~$ setserial -g /dev/ttyS
kami mengetahui laluan ke pelabuhan ke-232 kami. Jika sistem mengadu tentang setserial, pasangkannya
~$ sudo apt-get install setserial
kami mengetahui laluan ke port fizikal kami (contohnya, saya adalah /dev/ttyS0). Sekarang anda perlu menulis laluan ini ke fail skrip stm32loader.py dan bukannya "/dev/tty.usbserial-..." lalai. Taipkan terminal
~$ python stm32loader.py -h
...untuk meminta bantuan dan memuat naik perisian tegar ke pengawal kami.

Kaedah 2:
Melalui USB OTG, menggunakan mod DFU, memerlukan kuarza luaran pada 8 MHz, 14.7456 MHz atau 25 MHz (tidak semua pengawal dengan USB OTG mempunyai pemuat but ini; anda perlu berhati-hati melihat pelabelan pengawal anda)

3 cara:
JTAG/SWD. Nah, bagi mereka yang mempunyai papan demo jenis Discovery atau pengaturcara JTAG/SWD buatan sendiri, anda boleh memuat naik kod dan sudah menyahpepijat mikropengawal anda dengan cara ini. Untuk JTAG, mikropengawal mempunyai 6 kaki (TRST, TDI, TMS, TCK, TDO, RST) + 2 untuk kuasa. SWD menggunakan 4 isyarat (SWDIO, SWCLK SWO, RESET) dan 2 untuk kuasa.

PS. Dalam persekitaran EAGLE, saya melakar beberapa litar kosong untuk pengawal 48, 64 dan 100 kaki (folder helang), dan stm32loader mengandungi skrip stm32loader.py

DALAM tahun lepas Pengawal mikro 32-bit (MCU) berasaskan pemproses ARM dengan pantas menakluki dunia elektronik. Kejayaan ini disebabkan oleh prestasi tinggi, seni bina termaju, penggunaan tenaga yang rendah, kos rendah dan alat pengaturcaraan lanjutan.

CERITA PENDEK
Nama ARM ialah akronim untuk Advanced RISC Machines, di mana RISC (Reduced Instruction Set Computer) bermaksud seni bina pemproses set arahan yang dikurangkan. Jumlah MK yang popular, dan contoh keluarga PIC dan AVR, juga ada seni bina RISC, yang memungkinkan untuk meningkatkan prestasi dengan memudahkan penyahkodan arahan dan mempercepatkan pelaksanaannya. Kemunculan mikropengawal ARM 32-bit yang canggih dan produktif membolehkan kami meneruskan untuk menyelesaikan masalah yang lebih kompleks yang tidak dapat diatasi oleh MCU 8 dan 16-bit lagi. Seni bina mikropemproses ARM dengan teras 32-bit dan set arahan RISC telah dibangunkan oleh syarikat British ARM Ltd, yang secara eksklusif membangunkan kernel, penyusun dan alat penyahpepijatan. Syarikat itu tidak mengeluarkan MK, tetapi menjual lesen untuk pengeluaran mereka. MK ARM ialah salah satu segmen pasaran MK yang paling pesat berkembang. Peranti ini menggunakan teknologi penjimatan tenaga, oleh itu ia digunakan secara meluas dalam sistem terbenam dan menguasai pasaran peranti mudah alih, untuk siapa ia penting penggunaan kuasa yang rendah. selain itu, Pengawal mikro ARM digunakan secara aktif dalam komunikasi, peranti mudah alih dan terbenam jika diperlukan prestasi tinggi. Satu ciri seni bina ARM ialah teras pengkomputeran pemproses, yang tidak dilengkapi dengan sebarang elemen tambahan. Setiap pembangun pemproses mesti melengkapkan teras ini secara bebas blok yang diperlukan untuk tugasan khusus anda. Pendekatan ini telah berfungsi dengan baik untuk pengeluar cip besar, walaupun ia pada mulanya tertumpu pada penyelesaian pemproses klasik. Pemproses ARM telah pun melalui beberapa peringkat pembangunan dan terkenal dengan keluarga ARM7, ARM9, ARM11 dan Cortex. Yang terakhir ini dibahagikan kepada subfamili pemproses CortexA klasik, pemproses masa nyata CortexR dan teras mikropemproses CortexM. Teras CortexMlah yang menjadi asas untuk pembangunan kelas besar MCU 32-bit. Ia berbeza daripada varian lain seni bina Cortex terutamanya dalam penggunaan set arahan Thumb2 16-bit. Set ini menggabungkan prestasi dan kekompakan arahan ARM dan Thumb "klasik" dan dibangunkan khusus untuk bekerja dengan bahasa C dan C++, yang meningkatkan kualiti kod dengan ketara. Kelebihan besar mikropengawal yang dibina pada teras CortexM ialah keserasian perisian mereka, yang secara teorinya membenarkan penggunaan kod program dalam bahasa tahap tinggi dalam model pengeluar yang berbeza. Selain menunjukkan kawasan aplikasi teras, pembangun MK menunjukkan prestasi teras CortexM pada skala sepuluh mata. Hari ini, pilihan yang paling popular ialah CortexM3 dan CortexM4. MK dengan seni bina ARM dihasilkan oleh syarikat seperti Peranti Analog, Atmel, Xilinx, Altera, Cirrus Logic, Intel, Marvell, NXP, STMicroelectronics, Samsung, LG, MediaTek, MStar, Qualcomm, SonyEricsson, Texas Instruments, nVidia, Freescale, Milander, HiSilicon dan lain-lain.
Terima kasih kepada seni bina yang dioptimumkan, kos MCU berdasarkan teras CortexM dalam beberapa kes adalah lebih rendah daripada kebanyakan peranti 8-bit. Model "lebih muda" kini boleh dibeli dengan harga 30 rubel. untuk badan, yang mewujudkan persaingan untuk generasi terdahulu MK. PENGAWAL MIKRO STM32 Mari kita pertimbangkan MCU yang paling berpatutan dan meluas bagi keluarga STM32F100 daripada STMicroelectronics, yang merupakan salah satu pengeluar MCU terkemuka di dunia. Syarikat itu baru-baru ini mengumumkan permulaan pengeluaran MK 32-bit yang mengambil kesempatan daripada industri
Teras STM32 dalam aplikasi kos rendah. MCU daripada keluarga talian STM32F100 Value direka untuk peranti yang prestasi MCU 16-bit tidak mencukupi, dan kefungsian kaya peranti 32-bit "biasa" adalah berlebihan. Barisan STM32F100 MK adalah berdasarkan teras moden ARM CortexM3 dengan peranti dioptimumkan untuk aplikasi aplikasi biasa, di mana MK 16-bit digunakan. Prestasi MCU STM32F100 pada 24 MHz adalah lebih baik daripada kebanyakan MCU 16-bit. Barisan ini termasuk peranti dengan pelbagai parameter:
● dari 16 hingga 128 kbait memori kilat program;
● dari 4 hingga 8 kbait memori capaian rawak;
● sehingga 80 port input/output GPIO;
● sehingga sembilan pemasa 16-bit dengan fungsi lanjutan;
● dua pemasa pengawas;
● ADC 12-bit berkelajuan tinggi 16 saluran;
● dua DAC 12-bit dengan penjana isyarat terbina dalam;
● sehingga tiga antara muka UART yang menyokong mod IrDA, LIN dan ISO7816;
● sehingga dua antara muka SPI;
● sehingga dua antara muka I2C yang menyokong mod SMBus dan PMBus;
● Akses ingatan terus (DMA) 7 saluran;
● Antara muka CEC (Kawalan Elektronik Pengguna) disertakan dalam standard HDMI;
● jam masa nyata (RTC);
● Pengawal gangguan bersarang NVIC.

Rajah berfungsi STM32F100 ditunjukkan dalam Rajah 1.

nasi. 1. Seni bina garisan MK STM32F100

Kemudahan tambahan ialah keserasian pin peranti, yang membolehkan, jika perlu, menggunakan mana-mana MK keluarga dengan fungsi dan memori yang lebih besar tanpa mengolah semula papan litar bercetak. Barisan pengawal STM32F100 dihasilkan dalam tiga jenis Pakej LQFP48, LQFP64 dan LQFP100, masing-masing mempunyai 48, 64 dan 100 pin. Tugasan pin dibentangkan dalam Rajah 2, 3 dan 4. Kes sedemikian boleh dipasang pada papan litar bercetak tanpa menggunakan peralatan khas, yang merupakan faktor penting dalam pengeluaran berskala kecil.


nasi. 2. STM32 MCU dalam pakej LQFP48 Rajah. 3. STM32 MCU dalam pakej LQFP64


nasi. 4. STM32 MCU dalam pakej LQFP100

STM32F100 ialah peranti mampu milik dan dioptimumkan berdasarkan teras CortexM3, disokong oleh persekitaran pembangunan lanjutan untuk keluarga mikropengawal STM32, yang mengandungi
Perpustakaan percuma untuk semua peranti, termasuk kawalan motor dan papan kekunci sentuh.

RAJAH SAMBUNGAN STM32F100C4
Mari kita pertimbangkan kegunaan praktikal MK menggunakan contoh peranti paling mudah STM32F100C4, yang, bagaimanapun, mengandungi semua blok utama barisan STM32F100. Gambar rajah litar elektrik STM32F100C4 ditunjukkan dalam Rajah 5.


nasi. 5. Gambar rajah sambungan untuk MK STM32F100C4

Kapasitor C1 memastikan bahawa MK ditetapkan semula apabila kuasa dihidupkan, dan kapasitor C2-C6 menapis voltan bekalan. Perintang R1 dan R2 mengehadkan arus isyarat pin MK. Pengayun dalaman digunakan sebagai sumber jam, jadi tidak perlu menggunakan kristal luaran.


Input BOOT0 dan BOOT1 membolehkan anda memilih kaedah memuatkan MK apabila menghidupkan kuasa mengikut jadual. Input BOOT0 disambungkan kepada bas berpotensi sifar melalui perintang R2, yang melindungi pin BOOT0 daripada litar pintas apabila digunakan sebagai port keluaran PB2. Menggunakan penyambung J1 dan satu pelompat, anda boleh menukar potensi pada input BOOT0, dengan itu menentukan cara MK dimuatkan - daripada memori denyar atau daripada pemuat but terbina dalam. Jika anda perlu memuatkan MK dari RAM, penyambung serupa dengan pelompat boleh disambungkan ke input BOOT1.
Pengaturcaraan MK dijalankan melalui port bersiri UART1 atau melalui pengaturcara khas - penyahpepijat JTAG atau STLink. Yang terakhir adalah sebahagian daripada peranti penyahpepijatan popular STM32VLDISCOVERY, ditunjukkan dalam Rajah 6. Pada papan STM32VLDIS COVERY, penyambung 4-pin pengaturcara - penyahpepijat STLink - ditetapkan SWD. Pengarang artikel mencadangkan pengaturcaraan MK melalui port bersiri UART1, kerana ia lebih mudah, tidak memerlukan peralatan khas dan tidak lebih rendah daripada kelajuan JTAG atau ST Link. Sebagai peranti kawalan yang mampu menjana arahan dan memaparkan hasil program MK, serta sebagai pengaturcara, anda boleh menggunakan mana-mana Komputer peribadi(PC) dengan port COM bersiri atau Port USB dengan penukar USBRS232.

Untuk memasangkan port COM PC dengan MK Mana-mana akan lakukan penukar isyarat RS232 ke tahap isyarat logik dari 0 hingga 3.3 V, contohnya, litar mikro ADM3232. talian penghantaran TXD port bersiri komputer, selepas penukar tahap, harus disambungkan ke input PA10 mikropengawal, dan talian penerima RXD, melalui penukar yang serupa, ke output PA9.

Jika anda perlu menggunakan jam MK yang tidak meruap, anda harus menyambungkan bateri CR2032 dengan voltan 3 V dan resonator kuarza dengan frekuensi 32768 Hz kepadanya. Untuk tujuan ini, MK dilengkapi dengan pin Vbat/GND dan OSC32_IN/OSC32_OUT. Pin Vbat mesti diputuskan terlebih dahulu daripada bas kuasa 3.3 V.

Baki terminal percuma MK boleh digunakan mengikut keperluan. Untuk melakukan ini, ia harus disambungkan ke penyambung yang terletak di sekeliling perimeter papan litar bercetak untuk MK, dengan analogi dengan popular Peranti Arduino dan papan pembangunan STM32VLDISCOVERY.


nasi. 6. Nyahpepijat peranti STM32VLDISCOVERY


Gambar rajah litar elektrik STM32VLDDISCOVERY.

Oleh itu, bergantung pada tujuan dan kaedah penggunaan MK, anda boleh menyambung kepadanya elemen yang diperlukan untuk mendayakan blok dan port fungsi lain, seperti ADC, DAC, SPI, I2C, dsb. Pada masa akan datang, peranti ini akan dipertimbangkan dengan lebih terperinci.

PENGATURCARAAN
Hari ini, banyak syarikat menawarkan alat untuk mencipta dan menyahpepijat program untuk mikropengawal STM32. Ini termasuk Keil daripada ARM Ltd, IAR Embedded Workbench untuk ARM, Atol lic TrueStudio, CooCox IDE, GCC dan Eclipse IDE. Pembangun boleh memilih perisian mengikut keutamaannya. Di bawah ini kami akan menerangkan kit alat Keil uVision 4 dari syarikat Keil, yang menyokong sejumlah besar jenis mikropengawal, mempunyai sistem alat penyahpepijatan yang dibangunkan dan boleh digunakan secara percuma dengan sekatan pada saiz kod yang dihasilkan sebanyak 32 kbait ( yang, sebenarnya, adalah maksimum untuk mikropengawal yang sedang dipertimbangkan).

Permulaan yang mudah dan cepat dengan CooCox CoIDE.

Jadi mari kita mulakan. Pergi ke laman web rasmi CooCox dan muat turun versi terkini CooCox CoIDE. Untuk memuat turun anda perlu mendaftar, pendaftaran adalah mudah dan percuma. Kemudian pasang fail yang dimuat turun dan jalankannya.

CooCox CoIDE- persekitaran pembangunan berdasarkan Eclipse, yang, sebagai tambahan kepada STM32, menyokong sekumpulan keluarga mikropengawal lain: Freescale, Holtek, NXP, Nuvoton, TI, Atmel SAM, Energy Micro, dsb. Dengan setiap versi baharu CoIDE, senarai mikropengawal sentiasa dikemas kini. Selepas berjaya memasang CoIDE, jalankan:

Tetingkap permulaan Langkah 1 akan muncul, di mana anda perlu memilih pengeluar mikropengawal kami. Tekan ST dan pergi ke Langkah 2 (pilih mikropengawal), di mana anda perlu memilih model tertentu. Kami mempunyai STM32F100RBT6B, jadi klik pada model yang sepadan:

Di sebelah kanan, tetingkap Bantuan dipaparkan ciri-ciri ringkas setiap cip. Selepas memilih mikropengawal yang kami perlukan, kami meneruskan ke langkah ketiga, Langkah 3 - untuk memilih perpustakaan yang diperlukan untuk kerja:

Mari buat projek mudah untuk berkelip LED, seperti kebiasaan untuk mempelajari mikropengawal.

Untuk melakukan ini, kami memerlukan perpustakaan GPIO, apabila didayakan, CoIDE akan meminta anda membuat projek baru. Klik Ya pada cadangan ini, nyatakan folder tempat projek kami akan disimpan dan namanya. Pada masa yang sama, CoIDE akan menyambung kepada projek 3 yang lain yang diperlukan untuk perpustakaan berfungsi, dan juga akan mencipta semua struktur projek yang diperlukan:

Satu lagi perkara yang baik tentang CoIDE ialah ia mempunyai keupayaan untuk memuatkan contoh terus ke dalam persekitaran pembangunan. Dalam tab Komponen anda boleh melihat bahawa terdapat contoh untuk hampir setiap perpustakaan, klik pada GPIO (dengan 4 contoh) dan lihatnya:

Anda boleh menambah contoh anda sendiri di sana. Seperti yang anda boleh lihat dalam tangkapan skrin di atas, contoh sudah mengandungi kod untuk berkelip LED GPIO_Blink. Anda boleh mengklik butang tambah dan ia akan ditambahkan pada projek, tetapi sebagai fail yang disertakan, jadi kami akan melakukannya secara berbeza dan hanya menyalin keseluruhan kod contoh ke dalam fail main.c. Satu-satunya perkara ialah menggantikan baris GPIO_Blink(void) void dengan int main(void). Jadi, tekan F7 (atau pilih Projek->Bina daripada menu) untuk menyusun projek dan... tidak berjaya!

Persekitaran memerlukan Penyusun GCC, tetapi kami tidak memilikinya. Oleh itu, pergi ke halaman Alat GNU untuk ARM Embedded Processors, pilih jenis OS anda di sebelah kanan dan muat turun versi terkini rantaian alat. Kemudian kami menjalankan fail dan memasang gcc toolchain. Seterusnya, dalam tetapan CoIDE kami akan menunjukkan cara yang betul kepada rantai alat:

Tekan F7 sekali lagi (Project->Build) dan lihat bahawa kompilasi berjaya:

Apa yang tinggal adalah untuk menyalakan mikropengawal. Untuk melakukan ini, apabila bantuan USB Kami menyambungkan papan kami ke komputer. Kemudian, dalam tetapan penyahpepijat anda perlu memasang ST-Link; untuk melakukan ini, pilih Project->Configuration dalam menu dan buka tab Debugger. Pilih ST-Link daripada senarai juntai bawah dan tutup tetingkap:

Mari cuba flash MK. Dalam menu, pilih Flash->Program Download (atau klik pada ikon yang sepadan pada bar alat) dan lihat bahawa MK telah berjaya dipancarkan:

Kami melihat LED berkelip pada papan, saya rasa tidak masuk akal untuk menyediakan video atau foto, kerana... semua orang melihatnya.

Juga, dalam CoIDE mereka berfungsi pelbagai mod debugging, untuk melakukan ini tekan CTRL+F5 (atau dalam menu Debug->Debug):

Itu sahaja. Seperti yang anda lihat, menyediakan dan bekerja dengan CoIDE adalah sangat mudah. Saya harap artikel ini akan menggalakkan anda untuk mengkaji mikropengawal STM32 yang sangat menjanjikan dan murah.

Diterbitkan 08/09/2016

Pengawal mikro STM32 menjadi semakin popular kerana kuasa mereka, peranti yang agak pelbagai dan fleksibiliti. Kami akan mula belajar menggunakan papan ujian bajet, yang kosnya tidak melebihi $2 (daripada bahasa Cina). Kami juga akan memerlukan ST-Link pengaturcara, kosnya adalah kira-kira $2.5 (daripada bahasa Cina). Jumlah perbelanjaan sedemikian tersedia untuk kedua-dua pelajar dan pelajar sekolah, jadi ia adalah daripada ini pilihan bajet Saya cadangkan kita mulakan.


Mikropengawal ini bukanlah yang paling berkuasa di kalangan STM32, tetapi bukan juga yang paling lemah. wujud pelbagai papan Dengan STM32, termasuk Penemuan yang berharga kira-kira $20. Pada papan sedemikian, hampir semuanya sama seperti di papan kami, ditambah dengan pengaturcara. Dalam kes kami, kami akan menggunakan pengaturcara secara berasingan.

Pengawal mikro STM32F103C8. Ciri-ciri

  • Teras Cortex-M3 ARM 32-bit
  • Kekerapan maksimum 72MHz
  • Memori denyar 64KB untuk program
  • Memori SRAM 20Kb
  • Bekalan kuasa 2.0 … 3.3V
  • 2 x 12-bit ADC (0 ... 3.6V)
  • Pengawal DMA
  • 37 input/output bertolak ansur 5V
  • 4 pemasa 16-bit
  • 2 pemasa pengawas
  • I2C – 2 bas
  • USART – 3 bas
  • SPI – 2 bas
  • Antara muka berkelajuan penuh USB 2.0
  • RTC – jam terbina dalam

Tersedia pada papan STM32F103C8

  • Port output A0-A12, B0-B1, B3-B15, C13-C15
  • Mikro-USB melalui mana anda boleh kuasakan papan. Papan mempunyai penstabil voltan 3.3V. Kuasa 3.3V atau 5V boleh dibekalkan kepada pin yang sepadan pada papan.
  • Butang Tetapkan semula
  • Dua penerjun BOOT0 Dan BOOT1. Kami akan menggunakannya semasa berkelip melalui UART.
  • Dua kuarza 8 MHz dan 32768 Hz. Pengawal mikro mempunyai pengganda frekuensi, jadi pada 8 MHz kuarza kita boleh capai kekerapan maksimum pengawal 72MHz.
  • Dua LED. PWR– isyarat bahawa kuasa dibekalkan. PC13– disambungkan kepada output C13.
  • Penyambung untuk pengaturcara ST-Link.

Jadi, mari kita mulakan dengan cuba menghidupkan mikropengawal. Ini boleh dilakukan melalui USART, atau menggunakan pengaturcara ST-Link.

Anda boleh memuat turun fail ujian untuk perisian tegar. Program ini memancarkan LED pada papan.

Perisian tegar STM32 menggunakan penyesuai USB-Uart untuk Windows

DALAM ingatan sistem STM32 Terdapat Pemuat but. Pemuat but direkodkan pada peringkat pengeluaran dan mana-mana mikropengawal STM32 boleh diprogramkan melalui antara muka USART menggunakan penyesuai USART-USB. Penyesuai sedemikian paling kerap dibuat berdasarkan litar mikro yang popular FT232RL. Pertama sekali, sambungkan penyesuai ke komputer dan pasang pemacu (jika perlu). Anda boleh memuat turun pemacu dari tapak web pengilang FT232RL– ftdicip.com. Anda perlu memuat turun pemacu VCP(port com maya). Selepas memasang pemacu, port bersiri maya akan muncul pada komputer anda.


Menyambung RX Dan TX output ke pin yang sepadan USART1 pengawal mikro. RX sambungkan penyesuai ke TX mikropengawal (A9). TX sambungkan penyesuai ke RX mikropengawal (A10). Memandangkan USART-USB mempunyai output kuasa 3.3V, kami akan membekalkan kuasa kepada papan daripadanya.

Untuk meletakkan mikropengawal ke dalam mod pengaturcaraan, anda perlu menetapkan pin BOOT0 Dan BOOT1 V keadaan yang dikehendaki dan but semula dengan butang Tetapkan semula atau matikan dan hidupkan kuasa mikropengawal. Untuk ini kami mempunyai pelompat. Pelbagai kombinasi memandu mikropengawal ke dalam pelbagai mod. Kami hanya berminat dalam satu mod. Untuk melakukan ini, mikropengawal mempunyai BOOT0 mesti ada yang logik, dan outputnya BOOT1– sifar logik. Di papan ini adalah kedudukan pelompat berikut:

Selepas menekan butang Tetapkan semula atau memutuskan sambungan dan menyambung kuasa, mikropengawal mesti memasuki mod pengaturcaraan.

Perisian perisian tegar

Jika kita menggunakan penyesuai USB-UART, nama port akan menjadi seperti ini /dev/ttyUSB0

Dapatkan maklumat cip

Keputusan:

Kami membaca dari cip ke dalam dump.bin fail

sudo stm32flash -r dump.bin /dev/ttyUSB0

Tulis pada cip

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

Keputusan:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Menggunakan Penghurai: Antara Muka BINARI Mentah serial_posix: 57600 8E1 Versi: 0x22 Pilihan 1: 0x00 Pilihan 2: 0x00 ID Peranti: 0x0410 (Ketumpatan Sederhana 120KiB: RAM:d120KiB: pemuat but) - Denyar: 128KiB (saiz sektor: 4x1024) - RAM Pilihan: 16b - RAM Sistem: 2KiB Tulis pada memori Memadam memori Alamat yang ditulis dan disahkan 0x08012900 (100.00%) Selesai. Memulakan pelaksanaan di alamat 0x08000000... selesai.

Perisian tegar STM32 menggunakan pengaturcara ST-Link untuk Windows

Apabila menggunakan pengaturcara ST-Link kesimpulan BOOT0 Dan BOOT1 tidak digunakan dan harus berada dalam kedudukan standard untuk Operasi biasa pengawal.

(Buku dalam bahasa Rusia)

Penandaan STM32

Keluarga perantiJenis produkSubkeluarga perantiKiraan pinMemori kilat saizPakejKadar suhu
STM32 =
Pengawal mikro 32-bit berasaskan ARM
F = Tujuan am
L = Kuasa ultra-rendah
TS = Skrin Sentuh
W = sistem tanpa wayar pada cip
60 = rintangan berbilang sentuh
103 = garis prestasi
F = 20 pin
G = 28 pin
K = 32 pin
T = 36 pin
H = 40 pin
C = 48/49 pin
R = 64 pin
O=90 pin
V = 100 pin
Z = 144 pin
I = 176 pin
B = 208 pin
N = 216 pin
4 = 16 Kbait memori Flash
6 = 32 Kbait memori Flash
8 = 64 Kbait memori Flash
B = 128 Kbait memori Flash
Z = 192 Kbait memori Flash
C = 256 Kbait memori Flash
D = 384 Kbait memori Flash
E = 512 Kbait memori Flash
F = 768 Kbait memori Flash
G = 1024 Kbait memori Flash
I = 2048 Kbait memori Flash
H = UFBGA
N=TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Julat suhu industri, –40…+85 °C.
7 = Julat suhu industri, -40…+ 105 °C.
STM32F103 C8 T6

Bagaimana untuk mengalih keluar perlindungan tulis/baca?

Jika anda menerima papan dengan STM32F103, tetapi pengaturcara tidak melihatnya, ini bermakna orang Cina telah melindungi memori Flash mikropengawal. Soalan "mengapa?" mari kita abaikan. Untuk mengalih keluar penyekatan, kami akan menyambungkan penyesuai UART dan program melaluinya. Kami menetapkan pelompat untuk pengaturcaraan dan kami pergi:

Saya akan melakukan ini dari Ubuntu menggunakan utiliti stm32flash.

1. Periksa sama ada mikropengawal kelihatan:

Sudo stm32flash /dev/ttyUSB0

Anda sepatutnya mendapat sesuatu seperti ini:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Antara muka serial_posix: 57600 8E1 Versi: 0x22 Pilihan 1: 0x00 Pilihan 2: 0x00 ID Peranti: 0x0410 (Ketumpatan Sederhana) - RAM: 20KiB (dimuatkan oleh Buta Denyar 51) 128KiB (saiz sektor: 4x1024) - RAM Pilihan: 16b - RAM Sistem: 2KiB

2. Alih keluar perlindungan baca dan kemudian tulis perlindungan:

Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Antara muka serial_posix: 57600 8E1 Versi: 0x22 Pilihan 1: 0x00 Pilihan 2: 0x00 ID Peranti: 0x0410 Kid (0x0410) 512b dikhaskan oleh pemuat but) - Denyar: 128KiB (saiz sektor: 4x1024) - RAM Pilihan: 16b - RAM Sistem: Denyar Baca-Tanpa Lindung 2KiB Selesai. sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Antara muka serial_posix: 57600 8E1 Versi: 0x22 Pilihan 1: 0x00 Pilihan 2: 0x00 ID Peranti: (0x0410 Peranti Sederhana: 0x0410) 512b dikhaskan oleh pemuat but) - Denyar: 128KiB (saiz sektor: 4x1024) - RAM Pilihan: 16b - RAM Sistem: 2KiB Denyar tanpa perlindungan Tulis Selesai.

Kini anda boleh bekerja secara normal dengan mikropengawal.

Pengawal mikro untuk anak kucing

Meow semua, kucing :)

Pada suatu hari, seekor kucing meninggalkan saya: (Nah, mengapa makan valerian, saya memutuskan untuk turun ke perniagaan, boleh dikatakan, "untuk kebaikan Tanah Air." Saya telah lama ingin bekerja pada peranti digital, tetapi saya tidak tiada masa (anda tahu, sama ada tidur atau dengan kucing berjalan di atas bumbung), dan kemudian masanya baru sahaja muncul. Baiklah, mari mulakan..)

Seperti biasa, segalanya bermula dengan pilihan. Nah, nampaknya pilihannya ialah PIC kecil atau AVR. Saya entah bagaimana lebih menyukai yang terakhir. Saya juga memerlukan pengaturcara USB kerana kekurangan port lain pada komputer, harga yang hampir membuat ekor saya jatuh. Terdapat juga Arduino - binatang seperti itu. Ia juga boleh diprogramkan melalui USB. Nah, saya fikir, "apa yang diperintahkan oleh doktor." Di kampung kami anda hanya boleh mendapatkannya melalui kedai dalam talian. Saya menemui tawaran yang lebih baik, hampir membelinya dan... OOP! Saya sedang mencari - STM32VL-Discovery. Apakah jenis haiwan ini? Hmm, STM32.. Aku terdengar sesuatu dari sudut telinga.. Dan ciri-cirinya membuatkan misai aku berdiri, jujur!

Dan dia mempunyai banyak cakar!

Jadi, mengikut urutan:

  • Arduino mempunyai 14 port I/O digital dan 6 input analog. STM32VL-Discovery mempunyai 45 input/output digital, 10 daripadanya boleh ditukar secara pilihan kepada input analog.
  • Arduino mempunyai 32 KB storan program dan 2 KB RAM. STM32VL-Discovery mempunyai 64 KB storan program dan 8 KB RAM.
  • Daripada Arduino kekerapan jam STM32VL-Discovery mempunyai 16 MHz dan 24 MHz.
  • Mana-mana mikropengawal STM32 boleh digantikan dengan STM32 yang lain, tetapi dengan ciri terbaik, tanpa mengubah skema
  • STM32 boleh diprogramkan tanpa pengaturcara menggunakan port COM(lebih lanjut mengenai ini sedikit kemudian)
  • Harga Arduino pada masa penulisan ialah ~1300 rubel, STM32VL-Discovery ~600 rubel. Ini lebih daripada 2 kali lebih murah!

Apa yang akan datang? STM32VL-Discovery mempunyai pengaturcara/penyahpepijat terbina dalam, yang dengan sedikit pergerakan kaki (mengeluarkan pelompat) boleh memprogram dan nyahpepijat (menyahpepijat adalah perkara yang sangat berguna, tetapi lebih lanjut mengenainya kemudian) mikropengawal STM32 di luar papan. Ini tidak akan berfungsi dengan Arduino. Iaitu, menggunakan STM32VL-Discovery kita menjimatkan wang dan mendapat produktiviti yang lebih besar dan kebebasan kreatif :)

Dan mikropengawal STM32 sendiri kelihatan lebih menarik daripada yang lain:

STM32F100C4T6B ATtiny24A-SSU PIC16F688-I/SL STM32F103RET6 ATmega1284P-PU PIC18F4550-I/PT
Harga purata, gosok 60 65 60 240 330 220
Kekerapan jam, MHz 24 20 20 72 20 48
Memori kilat, KB 16 2 4 512 128 16
RAM, Byte 4096 128 256 65536 16384 2048
USART, pcs. 2 0 0 5 2 0
SPI, pcs. 1 1 0 3 1 1
ADC, pcs. 16x12Bit 8x10Bit 8x10Bit 16x12Bit 8x10Bit 13x10Bit
DAC, pcs. 1x12Bit 0 0 2x12Bit 0 0
Bilangan baris input/output, pcs. 37 12 12 51 32 35

Dan STM32 ialah 32-bit, yang bermaksud ia boleh berfungsi dengan data 32-bit dalam satu kitaran jam. AVR dan PIC tidak boleh berbangga dengan ini.

Nah, kucing, adakah anda yakin? Kemudian mari kita mulakan perjalanan seorang pahlawan digital muda!)

Bagaimanakah ia berfungsi? Apakah kandungannya? Apa yang dia boleh lakukan?

Seperti yang anda tahu, semua kucing sangat ingin tahu, dan kucing radio terutamanya!

Mikropengawal ialah litar mikro yang menggabungkan fungsi pemproses, peranti, mempunyai RAM, ingatan kilat. Seperti komputer, hanya lebih kecil!

Mari kita buat analogi: komputer dikawal oleh sistem pengendalian, dan mikropengawal dikawal oleh "perisian tegar" yang anda tulis; sistem pengendalian komputer disimpan pada cakera keras, "perisian tegar" mikropengawal disimpan dalam memori denyarnya; Fungsi RAM adalah serupa - menyimpan data yang berubah semasa pelaksanaan program. Dan MK juga mempunyai pelbagai peranti persisian, seperti ADC dan DAC sebagai contoh.

MK berkomunikasi dengan dunia luar menggunakan cakar di badannya (tidak seperti kucing, sudah tentu, tetapi yang logam). Tetapi tidak semua daripada mereka dikawal oleh program ini, terdapat pin kuasa, pin set semula, pin kuasa persisian, kuasa sandaran. Dan mereka yang dikawal oleh program dibahagikan kepada kumpulan yang dipanggil "pelabuhan". Semua output terkawal ini dinamakan dengan 2 huruf dan nombor. Contohnya PA1: P - port, A - port "A", 1 - nombor pin port ini.

Dalam program ini, port dikonfigurasikan sama ada sebagai input atau output, seperti yang anda mahu.

Pin port yang dikonfigurasikan untuk input boleh dalam mod yang berbeza; untuk setiap pin ia boleh berbeza:

  • Input digital ialah input yang nilainya (logik 1 atau 0) boleh dibaca oleh program. Jika voltan pada input ialah 0, maka nilainya ialah 0, jika voltan pada input adalah sama dengan voltan bekalan, maka nilai input ialah 1. Yang ketiga tidak diberikan. Boleh dilakukan dengan perintang tarik naik sama ada ke kuasa atau ke tanah
  • Input analog - input yang nilainya boleh dibaca oleh program, tetapi boleh terdapat banyak nilai - sebanyak 4096. Lebih tepat lagi, dari 0 jika voltan input adalah 0 berbanding dengan bekalan kuasa tolak mikropengawal kepada 4095 jika voltan masukan adalah sama dengan voltan bekalan. Semua penukaran ini dilakukan oleh ADC - penukar analog-ke-digital, menggunakannya anda boleh, sebagai contoh, mengukur voltan pada termistor dan mengetahui suhu, atau mengukur voltan pada fotoperintang dan mengetahui kecerahan cahaya yang jatuh padanya... Nah, anda boleh menghasilkan banyak perkara jika anda mempunyai imaginasi :) Jika anda kuasa mikropengawal dari 3V, maka 0V = 0, dan 3B = 4096, yang bermaksud 3/4096 = 0.000732421, i.e. apabila voltan input berubah sebanyak 0.000732421V, nilai input dalam atur cara berubah kepada 1. Ia tidak begitu rumit, bukan? Teruskan
  • Input digital dalam mod fungsi alternatif - input untuk bekerja dengan persisian. Contohnya, input untuk pemasa atau input untuk beberapa antara muka. Nilai input ini tidak boleh dibaca daripada program. Dalam program, sebagai contoh, anda boleh membaca data yang diterima daripada output ini dengan beberapa antara muka.

Dan port yang dikonfigurasikan untuk output boleh mempunyai pin dalam mod berikut:

  • Keluar. Hanya jalan keluar. Keluaran digital biasa. Terdapat sama ada voltan bekalan pada pin (logik 1) atau tiada voltan pada pin (logik 0). Mudah sahaja.
  • Output dalam mod fungsi alternatif - output dikawal oleh peranti. Output ini tidak boleh dikawal daripada program, tetapi program boleh dipaksa untuk mengawal output ini, contohnya antara muka.

Tetapi tidak semua kesimpulan boleh diberikan "seperti yang anda suka." Untuk mengetahui apa yang mungkin dan apa yang tidak, anda perlu melihat dokumentasi (Jadual 4) atau menggunakan program MicroXplorer.

Sebelum menggunakan port, anda mesti jamkannya dahulu - hantar denyutan jam kepadanya, kerana pada mulanya ia tidak dibekalkan untuk menjimatkan tenaga. Boleh pilih frekuensi yang berbeza jam - kekerapan lebih tinggi - input atau output port ini berfungsi lebih cepat, tetapi juga penggunaan tenaga yang lebih tinggi.

Terdapat juga kesimpulan BOOT 0 Dan BOOT 1. Pin ini bukan milik port; ia digunakan untuk mengawal pemuatan mikropengawal. Jika semasa bekalan kuasa terdapat sifar logik pada pin BOOT 0 (pin disambungkan ke titik biasa), maka mikropengawal melaksanakan program yang dimuatkan ke dalam memori kilat, i.e. Perisian tegar anda. Jika, apabila kuasa dibekalkan, pin BOOT 0 adalah logik (pin disambungkan kepada bekalan kuasa mikropengawal), dan pin BOOT 1 adalah sifar logik, maka mikropengawal tidak melaksanakan perisian tegar anda, tetapi pemuat but yang direkodkan kilang . Ingat ini! Anda akan banyak menggunakan ini apabila bekerja dengan mikropengawal STM32! Kadangkala memuatkan pemuat but yang direkodkan kilang - satu-satunya cara tulis/tukar perisian tegar mikropengawal. Ini berlaku, sebagai contoh, apabila mengkonfigurasi dalam perisian tegar pin yang disambungkan oleh pengaturcara atau apabila memancarkan perisian tegar mikropengawal tanpa menggunakan pengaturcara. Jadi sangat mengesyorkan Apabila mereka bentuk papan litar bercetak, pin ini (atau sekurang-kurangnya BOOT 0) harus diletakkan di tempat yang mudah.

Oleh itu, kami mengetahuinya :) Sekarang kami tahu apa itu mikropengawal dan apa yang terdiri daripadanya. Sekarang kita akan belajar tentang beberapa lagi kebijaksanaan dan beralih kepada perkara yang paling menarik - berlatih!

Program dalam mikropengawal dilaksanakan langkah demi langkah. Satu kitaran pemproses ialah satu langkah program.

Contohnya, biarkan lampu merah dan hijau berkelip sehingga butang ditekan. Tempoh setiap lampu ialah 5 saat. Inilah algoritmanya:

  1. Mari kita periksa sama ada terdapat voltan pada input dengan butang? (butang menutup output mikropengawal kepada + bekalan kuasa)
  2. Jika tiada voltan, maka lampu merah menyala selama 5 saat, lampu hijau padam, jika ada voltan, maka kita mula semula.
  3. Menyemak semula
  4. Jika tiada voltan, maka lampu hijau menyala selama 5 saat, lampu merah padam, jika ada voltan, maka kita mula semula.
  5. Mari kita mulakan semula

BERHENTI! Bagaimana jika saya menekan butang semasa lampu menyala? Tiada apa yang akan berlaku! Kerana program ini dilaksanakan langkah demi langkah, dan langkah dengan menyemak butang tekan adalah pada masa menukar mentol lampu.
Ia adalah tepat untuk kes sedemikian bahawa terdapat perkara seperti itu menyampuk

Gangguan memungkinkan untuk mengganggu pelaksanaan program utama. Ini boleh dilakukan sama ada dengan peristiwa luaran (menekan butang, melepaskan butang, menerima data, dll.) atau dalaman (oleh pemasa atau masa untuk memberi makan kucing, contohnya). Apabila gangguan ini berlaku, subrutin mula dilaksanakan. Subrutin mungkin berbeza untuk jenis yang berbeza gangguan, rutin ini dipanggil penangan sampuk.

Apabila pengendali gangguan yang sama ini menyelesaikan kerjanya, atur cara utama mula dilaksanakan dari tempat ia diganggu.

Jom bangkit!

Nah, anak kucing, sudah tiba masanya untuk bangun! Saya harap anda sudah mempunyai papan nyahpepijat? Atau sekurang-kurangnya mikropengawal? Saya harap ada :) Dan jika tidak, maka mari kita lari ke kedai! (dan sebaik-baiknya bukan untuk sosej. Walaupun...) Apakah ajaran tanpa amalan ini?

Adalah bagus untuk mempunyai papan penyahpepijatan pada mulanya, contohnya STM32VL-Discovery, tetapi jika katak itu mencekik atau anda masih tidak mempunyai cukup untuk sosej, maka anda boleh bertahan dengan satu mikropengawal dan antara muka RS-232 -> UART penukar (contohnya MAX3232) atau USB -> UART (cth FT232RL). Dalam kes ini, 100 rubel boleh dilakukan sepenuhnya, tetapi anda perlu membuat papan litar bercetak dan pateri sekurang-kurangnya 48 pin 0.3 mm lebar dengan jurang 0.2 mm. Saya memberi amaran.

Mula-mula anda perlu melampirkan papan nyahpepijat atau pengawal secara semula jadi pada komputer.

Jika anda mempunyai papan pembangunan:

Dengan papan nyahpepijat, sudah tentu, ia lebih mudah. Kami mengambil kord Mini-USB dan menyambungkan papan ke komputer, semua pemacu harus dipasang secara automatik. Lihat dongle STMicroelectronics STLink dalam pengurus peranti - petanda baik! Nah, jika berlaku masalah dan tiada apa-apa yang berjaya, anda tidak perlu menggaru sofa, anda hanya perlu datang ke sini dan memasang Utiliti STM32 ST-LINK.

Nah, jika anda adalah pemilik gembira komputer yang sedang berjalan Kawalan Windows 8, maka sebelum melakukan tindakan di atas anda perlu melakukan perkara berikut: Pilihan -> Tukar tetapan komputer -> Adalah biasa -> Pilihan istimewa muat turun dan pilih satu pilihan Melumpuhkan pengesahan tandatangan pemandu.

Jika anda mempunyai mikropengawal:

Jika anda mempunyai satu mikropengawal, maka anda mesti mempunyai kaki lurus. Tetapi saya tidak meragui anda!

Sebelum menyambungkan mikropengawal ke komputer, ia mesti dipateri ke papan litar bercetak. Untuk ini, sebagai tambahan kepada mikropengawal dan kaki lurus, anda memerlukan sekurang-kurangnya papan litar bercetak. Dan kemudian ada kreativiti anda.

Minimum kerja dalam rajah di bawah:

Tetapi ini adalah minimum yang tidak menarik.

Tambah LED dan butang (jangan lupa pin BOOT), seperti ini

Tetapi mungkin ada masalah dengan pematerian kutu ini. Tetapi saya harap mereka tidak akan timbul. Saya cuba mematerikannya dengan besi pematerian Soviet 25 W kegemaran saya dengan lebar hujung 3/4 daripada lebar pengawal. saya ada lebih banyak masalah dengan pembuatan papan litar bercetak... yelah, setiap orang ada teknologi masing-masing.

Dan penyesuai perlu dibuat kepada UART mengikut dokumentasi untuk litar mikro yang anda beli.

Kami menyambungkan pin TxD dan RxD pada papan litar bercetak dengan pin RxD dan TxD, masing-masing, penyesuai. Jangan lupa tentang perkara biasa dan pemakanan semua itu.

Pemilihan dan pemasangan perisian

Kami akan menggunakan persekitaran pembangunan IDE CooCox, tetapi ini bukan sahaja seperti itu, tetapi atas beberapa sebab:

  • Pertama, ia adalah perisian yang diedarkan secara bebas. Ini bermakna karma anda akan bersih
  • Pada pendapat saya (dan bukan sahaja saya), persekitaran pembangunan ini lebih mudah daripada yang lain
  • Membenarkan penggunaan nyahpepijat
  • Banyak contoh yang boleh dimuatkan ke dalam persekitaran pembangunan (berguna untuk anak kucing dan banyak lagi)

Persekitaran pembangunan ialah program pengekodan, pengkompil, dan penyahpepijat semuanya dalam satu. Mudah :) Tetapi jika beberapa kucing Chelyabinsk yang keras lebih selesa menulis kod (dalam notepad, sebagai contoh), menyusun dan berkelip program yang berbeza- Saya tidak keberatan, maka anda memerlukan utilit STM32 ST-LINK untuk memuat turun perisian tegar ke dalam mikropengawal. Pemiliknya adalah seorang yang budiman, seperti yang mereka katakan.

Persekitaran pembangunan ini adalah berdasarkan Eclipse yang terkenal.

  1. Jom ke sini
  2. Mencucuk Muat turun melalui CoCenter (Cadangkan)
  3. Masukkan alamat e-mel anda (tidak mengapa, ia ada "untuk persembahan")
  4. Selepas memuat turun, pasang yang ini CoCenter
  5. Dalam baris pertama di mana ia berkata CooCox CoIDE mencucuk Muat turun
  6. Selepas muat turun selesai, bukannya Muat turun kehendak Pasang. Tekan di sini
  7. Jom ke sini
  8. Betul-betul dalam lajur Muat turun muat turun fail yang .exe. Jom pasang.
  9. Kami buka sendiri CooCox CoIDE, tab Projek, Pilih Laluan Rangkaian Alat.
  10. Kami menunjukkan laluan ke fail arm-none-eabi-gcc.exe (kami memasang ini dalam langkah 8, laluannya lebih kurang seperti ini: D: Program Files (x86) GNU Tools ARM Embedded4.7 2013q1bin)
  11. Dibuka semula CoIDE, tekan Lihat -> Konfigurasi, buka tab Penyahpepijat dan kami melakukan ini [foto]
  12. Kami gembira kerana kini kami boleh menulis program dan memancarkannya ke dalam mikropengawal! Itulah yang akan kita lakukan.

Jika anda mempunyai pilihan tanpa papan nyahpepijat/pengaturcara, maka anda memerlukan program untuk memuatkan atur cara ke dalam MK Demonstrasi Pemuat Kilat yang terletak

Kita dapati bahasa bersama

Sebelum anda menulis program pertama anda, anda perlu mencari bahasa yang sama dengan MK. Tidak mungkin dia akan belajar bahasa kita, jadi kita perlu belajar (atau mungkin hanya ingat) bahasa di mana kita akan berkomunikasi dengan MK, ini adalah C. Kami hanya memerlukan asas (komposisi program, fungsi, pengendali). Jika anda tahu bahasa ini, maka anda boleh segera pergi ke item "Program pertama", tetapi saya akan membawa mereka yang tidak tahu terkini.

Projek ini terdiri daripada fail dengan sambungan .c Dan .h. Yang pertama mengandungi fungsi, yang kedua mengandungi nama fungsi yang digunakan dan pemalar, sebagai contoh. Begitulah keadaannya. Paling fail utama, yang mengandungi kod program utama.c. Untuk menggunakan pelbagai fungsi, anda perlu menyambungkan perpustakaan dengan fungsi ini. Mereka berhubung dengan rakaman #include "library_name" Nah, perpustakaan semestinya ada dalam projek itu. Mereka disertakan pada awal fail.

Fungsi adalah bahagian unik program. Secara umum, program terdiri daripada satu atau lebih fungsi. Fungsinya kelihatan seperti:

return_variable_type function_name (variable_type)
{
Badan berfungsi
}

Anda boleh menghantar beberapa pembolehubah ke fungsi, fungsi akan memprosesnya dan mengembalikan beberapa nilai. Sangat mudah untuk menggunakan fungsi untuk tindakan berulang daripada terus menulis sekeping kod yang sama; anda hanya boleh menghantar pembolehubah ke fungsi dan menerima semula nilai yang diproses.

Sebelum anda boleh menggunakan fungsi, ia mesti diisytiharkan pada awal fail. Mereka melakukannya seperti ini:

return_variable_type function_name (variable_type);

Oh ya, saya terlupa perkara yang paling penting! Mesti ada koma bertitik di hujung setiap baris!

Jika fungsi tidak mengembalikan apa-apa (contohnya, kelewatan masa, ia hanya menarik ekor kucing tepat pada masanya), maka jenisnya ditunjukkan batal.

Apabila bermula, fungsi sentiasa dilaksanakan terlebih dahulu utama().

Nah, kita nampaknya telah mengetahui fungsinya, pemahaman hanya akan datang dengan amalan.

Saya sebutkan di atas jenis berubah-ubah. Semua pembolehubah boleh jenis yang berbeza, berikut adalah yang utama:

  • INT - pembolehubah jenis ini hanya boleh menjadi integer dari -2147483648 hingga 2147483647
  • FLOAT - pembolehubah jenis ini ialah nombor dengan ketepatan sehingga 7 digit daripada ±1.5*10-45 hingga ±3.4*1033
  • DOUBLE - nombor dengan ketepatan sehingga 16 digit dari ±5*10-324 hingga ±1.7*10306
  • ULONG juga adalah integer, tetapi dari 0 hingga 18446744073709551615
  • PANJANG - integer daripada -9223372036854775808 hingga 9223372036854775807
  • CHAR - satu watak
  • BOOL ialah pembolehubah logik. Ia hanya boleh mempunyai 2 nilai: benar atau salah.

Rentetan (perkataan, ayat) boleh diwakili sebagai tatasusunan aksara taip char. Sebagai contoh:

char string = "Perkataan";

Di sini, kurungan segi empat sama ialah bilangan aksara dalam baris, "stroka" ialah nama tatasusunan.

Sebelum menggunakan pembolehubah, ia mesti diisytiharkan. (hanya nyatakan jenis dan nama pembolehubah)

  • + - tambahan.
  • - - penolakan.
  • * - pendaraban.
  • / - pembahagian.
  • = - memberikan nilai kepada pembolehubah.

Contohnya ungkapan a=b+c bermakna berikan kepada pembolehubah a nilai hasil tambah nilai pembolehubah b Dan c.

  • ++ - kenaikan. Meningkatkan nilai pembolehubah sebanyak 1
  • -- - penurunan. Menurunkan nilai pembolehubah sebanyak 1

Contohnya ungkapan a++ bermakna meningkatkan nilai pembolehubah a oleh 1 (sama seperti a=a+1)

  • == - perbandingan, tanda sama. (JANGAN KELIRU DENGAN TUGASAN)
  • != - perbandingan, tanda "tidak sama".
  • < - perbandingan, tanda "kurang daripada".
  • <= - perbandingan, tanda "kurang daripada atau sama".
  • > - perbandingan, tanda "lebih".
  • >= - perbandingan, tanda "lebih besar daripada atau sama".

Contohnya ungkapan a menjadi benar jika nilai pembolehubah a kurang daripada nilai pembolehubah b dan palsu jika nilainya sama atau a lebih b. Ungkapan a==b benar jika a sama b dan palsu jika a tidak sama b, TETAPI ungkapan a=b benar Sentiasa kerana ia bukan perbandingan, ia adalah tugasan kepada pembolehubah a nilai pembolehubah b.

  • % - baki bahagian

Contohnya jika a=5,b=3, kemudian nilai ungkapan a%b akan sama dengan 2 (sejak 5/3=1 (baki 2))

  • << - tukar bitwise ke kiri. Tanpa memperincikan maksud ungkapan tersebut a< dalam bahasa C ia akan sama dengan ungkapan a*2 b
  • >> - anjakan sedikit ke kanan. Ungkapan a>>b dalam program adalah bersamaan dengan ungkapan a/2 b
  • & - logik DAN.
  • | - logik ATAU.
  • ~ - penyongsangan.

Saya hampir terlupa untuk memberitahu anda tentang kitaran. asas:

sementara(syarat) (

badan gelung

Badan gelung (semuanya dalam pendakap kerinting) dilaksanakan apabila keadaan adalah benar (sehingga keadaan menjadi palsu).

untuk (nilai_awal; gelung_dilaksanakan_sehingga, langkah) (

badan gelung

Nilai_awal- nilai pembilang awal

Gelung_melaksanakan_sehingga - Sehingga nilai yang dicapai gelung berjalan

Langkah - dalam langkah apakah pembilang dikira?

Sebagai contoh

untuk (i=0; i<10, i++) {

badan gelung

Berikut ialah nilai awal pembolehubah i sama dengan 0, gelung berjalan sehingga nilai pembolehubah i kurang daripada 10, setiap kali gelung dilaksanakan kepada pembolehubah i 1 ditambah. Anda juga boleh menukar nilai pembolehubah terus dalam gelung.

jika (syarat)(

badan 1

) lain (

badan 2

Dalam peralihan bersyarat, "body 1" dilaksanakan jika syarat adalah benar dan "body 2" dilaksanakan jika syarat adalah palsu. Terdapat juga pilihan ini:

jika (syarat 1)(

) lain jika (syarat 2) (

Dalam kes ini, "badan 1" dilaksanakan jika "syarat 1" adalah benar, "badan 2" dilaksanakan jika "syarat 2" adalah benar. Terdapat beberapa syarat sedemikian, dan boleh juga ada satu lagi.

Keadaan boleh menjadi mudah dan majmuk: mudah - satu ungkapan logik, dan majmuk - beberapa ungkapan logik yang disambungkan oleh tanda & (syarat adalah benar apabila semua keadaan yang disambungkan oleh tanda ini adalah benar) atau | (sesuatu keadaan adalah benar jika sekurang-kurangnya satu syarat yang disambungkan oleh tanda ini adalah benar).

Satu lagi perkara yang berguna ialah komen. Mereka akan membantu anda memikirkan projek yang terlupa :) atau hanya supaya anda tidak melupakan sesuatu. Anda boleh mengulas sama ada selepas tanda-tanda // dan ke penghujung baris atau bermula dengan watak /* dan berakhir */ , dalam kes ini ulasan boleh terdiri daripada sebarang bilangan baris. Komen tidak menjejaskan saiz program.

Nah, itu nampaknya mengenai asasnya. Cukup untuk kali pertama (sehingga menulis bahagian seterusnya artikel)

Program pertama

Jangan menyimpang daripada tradisi (jika tidak anda tidak pernah tahu) dan mulakan dengan Hello World. Dan sepanjang perjalanan kami akan terus berkenalan dengan mikropengawal dan memperoleh pengalaman, boleh dikatakan.

Buka persekitaran pembangunan:

klik Semak imbas dalam Repositori

pilih ST

Kemudian kita akan melihat senarai perpustakaan yang disambungkan.

Untuk program mudah kami, kami memerlukan: teras CMSIS, But CMSIS, RCC, GPIO.

Perpustakaan teras CMSIS Dan But CMSIS - sistem, mereka mesti disambungkan

Perpustakaan RCC untuk bekerja dengan sistem pemasaan

Perpustakaan GPIO untuk bekerja dengan port I/O

Sekarang di sebelah kiri di tingkap Projek buka fail utama.c.

Mula-mula kita perlu menyambungkan perpustakaan kita (CMSIS tidak perlu disambungkan).

Kami pergi ke permulaan program dan menambah baris:

#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

batal Kelewatan(int i) (
untuk (; i != 0; i--);
}

Jadi. Di sini dalam susunan, fungsi tidak mengembalikan apa-apa, jadi batal, nama fungsi kelewatan, serta-merta mengisytiharkan pembolehubah i menaip int. Dalam pendakap kerinting badan fungsi adalah gelung untuk. Ini adalah entri baris beliau. Nilai awal i kita tidak berubah, gelung berjalan sehingga i tidak sama dengan sifar (seperti i menjadi sama dengan sifar, kitaran berhenti, fungsi "dimatikan"). Dengan setiap pelaksanaan badan gelung (kitaran), pembolehubah i berkurangan sebanyak 1. Iaitu Intipati kitaran adalah untuk hanya mengulangi sendiri bilangan kali yang sama i. Semasa gelung berjalan, masa berlalu, kelewatan berlaku.

Port mana yang bertanggungjawab untuk output yang boleh didapati dalam dokumentasi untuk MK:

Untuk jam port C, tambah baris:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , DAYAKAN);

Tambahkan baris pada program:

GPIO_InitTypeDef GPIO_Init1;

Dengan baris ini kami mengisytiharkan struktur GPIO_InitTypeDef- memberinya nama GPIO_Init untuk digunakan dalam program kami selanjutnya.

Parameter apa yang boleh dikonfigurasikan dalam struktur ini dan bentuk apa yang mereka ada, kami melihat semuanya dalam keadaan yang sama stm32f10x_gpio.h:

Sekarang, untuk mengkonfigurasi parameter pin menggunakan struktur, anda perlu menulis namanya, letakkan titik dan tetingkap akan muncul di mana parameter ini ditunjukkan

Klik dua kali pada salah satu daripadanya, dan ia muncul dalam baris, kemudian letakkan = (tugaskan) dan tulis nilai daripada stm32f10x_gpio.h

Kami melakukan perkara yang sama dengan semua parameter. Jangan lupa koma bertitik di hujung setiap baris!

GPIO_Init(GPIOC , &GPIO_Init);

Sekarang kita akan berkelip! Kami akan berkelip secara kitaran, kami akan gelung dalam gelung sementara. Keadaan kitaran ialah 1. Satu sentiasa benar, sifar sentiasa salah... itu sahaja c'est la vie...

Untuk menggunakan arus pada output, anda perlu menetapkan bit; untuk mematikan output, anda perlu menetapkan semula bit. Bagaimana untuk melakukannya - semuanya adalah sama stm32f10x_gpio.h:

Kami melakukan ini:

manakala (1)(

GPIO_SetBits(GPIOC, GPIO_Pin_9);

Kelewatan (200000);

GPIO_ResetBits(GPIOC, GPIO_Pin_9);

Kelewatan (200000);

1 sentiasa benar, yang bermaksud gelung akan bergelung.

GPIO_SetBits - fungsi tetapan bit

GPIO_ResetBits - fungsi set semula bit

Kelewatan (200000) - pada baris ini pelaksanaan program masuk ke dalam fungsi kelewatan, yang sama di mana kitaran untuk. Nombor 200000 dalam kurungan dihantar ke fungsi ini sebagai pembolehubah i. (ingat baris batal kelewatan(int i)?) dan gelung yang sama dilaksanakan dalam fungsi ini, semuanya 200,000 kali. Ia cepat :) selepas kitaran selesai untuk fungsi Delay selesai kerjanya kerana dia batal, maka ia tidak mengembalikan apa-apa dan program terus dilaksanakan.

Kerana sementara digelung, kemudian LED dihidupkan, kelewatan, LED dimatikan, kelewatan akan dilakukan dalam gelung tidak berkesudahan. Sehingga kuasa terputus atau gangguan berlaku (lebih lanjut mengenainya dalam artikel seterusnya).

Nah, program pertama sudah siap. Sekarang tekan F7, atur cara menyusun.

Sekarang jika anda mempunyai papan nyahpepijat, kemudian sambungkannya menggunakan kord USB dan tekan Muat turun Kod Ke Flash. Kami gembira dengan kerja yang dilakukan dan ilmu yang diperoleh :)

Dan jika anda tidak mempunyai papan nyahpepijat, kemudian sambungkan penyesuai yang dibuat sebelum ini ke papan anda, dan penyesuai ke port COM komputer. Seterusnya, sambungkan output BOOT 0 dengan bekalan kuasa positif mikropengawal dan hidupkan kuasa mikropengawal. Ini akan menyebabkan mikropengawal memasuki mod perisian tegar. Secara umum, prosedur perisian tegar tidak rumit. Anda hanya perlu mengikut arahan aplikasi Demonstrasi Pemuat Kilat. Pertama, nyatakan nombor port COM yang melaluinya mikropengawal anda disambungkan dan kelajuannya. Untuk mengelakkan kegagalan, lebih baik memilih kelajuan yang lebih rendah

Jika program melihat mikropengawal anda, tetingkap akan muncul di mana ia akan ditulis berapa banyak memori yang ada.

Selepas mengklik "Seterusnya", anda akan melihat halaman pengalamatan memori. Kami tidak akan memerlukannya.

Langkah seterusnya adalah yang paling penting. Anda boleh memilih pembersihan memori atau perisian tegar

Untuk firmware pilih Muat turun ke peranti dan di padang Muat turun daripada fail pilih fail .hex yang disusun, yang terletak dalam folder CooCox -> CooIDE -> ruang kerja -> nama_projek -> nama_projek -> Nyahpepijat -> Tong sampah. Kemudian klik "Seterusnya" sekali lagi.

Selepas kita melihat tetingkap ini:

Matikan kuasa kepada mikropengawal dan tutup Demonstrasi Pemuat Kilat, putuskan sambungan penyesuai dan hidupkan mikropengawal masuk mod biasa(Bila apabila dihidupkan pin BOOT 0 disambungkan kepada bekalan kuasa tolak mikropengawal). Kami bergembira!

Jadi, sekarang kita tahu mengapa mikropengawal STM lebih baik daripada yang lain, kita tahu bagaimana mikropengawal berfungsi, kita tahu cara menyalakan mikropengawal dalam papan nyahpepijat dan dalam papan kita, kita tahu asas-asas bahasa C yang diperlukan untuk memprogramkan STM32, kami telah mendapat pengalaman bekerja dengan mikropengawal (semoga positif) dan yang paling penting ialah kini anda boleh merealisasikan idea anda peranti digital ke dalam kehidupan (dan ceritakan tentang mereka di RadioKot tercinta)! Mereka mungkin masih mudah, tetapi semuanya dibuat dengan pengalaman. Dan dalam artikel berikut saya akan cuba bercakap tentang ADC, DAC, gangguan, penggunaan debugging dan perkara berguna lain.

Apa pendapat anda tentang artikel ini?