Teach Pelajaran dengan makmal jarak jauh

Pelajaran Teach

STM32 Mbed CodeIDE (1/8): kelipan pertama

Pelajar menggunakan STM32 Mbed CodeIDE untuk mengedit main.cpp, mengkompil dan memuat naik atur cara kelipan DigitalOut, kemudian merekodkan bukti LED daripada papan sebenar.

  • STM32 Nucleo (Mbed)
  • 50 min
  • Elektronik vokasional menengah atas / pengenalan
  • ms-MY
  • Embedded systems
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Hasil pembelajaran

  • Mengenal aliran kerja STM32 Mbed CodeIDE dan fail permulaan main.cpp.

  • Tulis program Mbed minimum dengan DigitalOut dan ThisThread::sleep_for().

  • Mengumpul bukti bahawa kod berjaya dikompil, dimuat naik dan mengubah output sebenar.

Pratonton aktiviti pelajar

Kandungan aktiviti

Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.

1

Sebelum membuka makmal

8 min

Pengaturcaraan terbenam biasanya bermula dengan bukti yang mudah dilihat: bolehkah kod anda mengubah peranti fizikal mengikut arahan? Kelipan pertama ialah langkah kecil, tetapi ia mengesahkan keseluruhan aliran kerja — edit, kompil, muat naik dan perhatikan papan sebenar.

Mbed OS memberikan program C++ anda satu set API siap pakai untuk kerja mikropengawal: pin digital, input analog, output PWM, pemasaan, benang dan mesej bersiri. Dalam makmal ini, CodeIDE menyediakan persekitaran Mbed untuk papan STM32 jauh. Program anda hidup dalam main.cpp, termasuk mbed.h, bermula dalam int main() dan mengawal perkakasan dengan mencipta objek Mbed.

Contohnya, DigitalOut status_led(PB_5, 0); mencipta objek output bernama status_led yang disambungkan ke pin STM32 PB_5. Pelajaran kemudian menggunakan objek Mbed lain seperti DigitalIn, AnalogIn dan PwmOut.

Semua penerangan yang diperlukan terdapat dalam pelajaran ini. Jika anda mahu merujuk dokumentasi rasmi semasa bekerja, buka halaman berikut:

- Mbed OS I/O API
- Mbed CE API rujukan

Daripada main.cpp kepada perkakasan yang boleh dilihat

daripada fail main.cpp melalui Compile dan Upload to board yang berjaya hingga memerhati STM32 jauh dengan kamera.

Gunakan Buka makmal, buka main.cpp dalam Fail, ganti dan simpan kod, pilih
Compile, kemudian Upload to board, dan akhirnya tonton kamera langsung. Untuk
pelajaran pertama ini, abaikan suis, butang, potensiometer, input konsol, ambang
dan meter kuasa. Simpan sebelum setiap kompilasi. Mesej kompilasi bukan bukti
bahawa LED berkelip, jadi sahkan hasilnya melalui kamera langsung.

Idea pemula adalah sekelip mata: hidupkan output, tunggu, matikan, tunggu dan ulangi.

Dalam Mbed, anda mula-mula mencipta objek yang disambungkan ke pin:

DigitalOut status_led(PB_5, 0);

Baca baris itu sebagai: "buat output digital bernama status_led pada pin PB_5, dan mulakannya pada nilai 0."

Papan yang anda aturcarakan ialah STM32 Nucleo WB55RG.

Papan STM32 Nucleo WB55RG

Foto papan STM32 Nucleo WB55RG yang digunakan dalam makmal jauh LabsLand.

Foto ini menunjukkan papan mikropengawal itu sendiri. Ia adalah untuk orientasi, bukan untuk mengenal pasti LED yang tepat daripada imej pegun. Makmal jauh langsung juga mungkin menunjukkan kawalan berasingan atau perkakasan latihan, tetapi ia tidak ditunjukkan dalam foto ini. Anda tidak memasukkan apa-apa ke dalam komputer anda sendiri; CodeIDE menghantar program yang dikompil ke papan jauh.

Di dalam while (true), program berulang selama-lamanya:

status_led = !status_led.read();
ThisThread::sleep_for(500ms);

Baca baris pertama sebagai: "baca nilai semasa, tukarkannya kepada nilai bertentangan, dan simpan semula nilai baharu itu pada output." Pengendali ! bermaksud "bukan" atau "bertentangan" untuk nilai 0/1.

Satu perubahan keadaan ialah satu peralihan, seperti on-to-off atau off-to-on. Kitaran kelip hidup mati penuh memerlukan dua perubahan keadaan: satu untuk dihidupkan dan satu untuk dimatikan semula.

Untuk menunggu 500ms selepas setiap togol, perihalan masa yang manakah betul?

2

Cipta dan uji kelipan

26 min

Peruntukkan dua proses kompilasi/muat naik dan kira-kira 18 minit masa makmal aktif: pertama 500ms, kemudian 1000ms. Jika baris gilir makmal jauh sibuk, jawab kedua-dua soalan ramalan dan sediakan tajuk untuk kedua-dua pemerhatian sebelum giliran anda.

Salin setiap baris daripada #include "mbed.h" hingga } akhir. Kod permulaan mempunyai tepat satu ruang letak yang menghalang kompilasi. Gantikan TODO 1 sebelum menyimpan atau mengkompil; TODO_WAIT_VALUE bukan sintaks C++ yang sah.

#include "mbed.h"

DigitalOut status_led(PB_5, 0);

int main() {
    // TODO 1: gantikan ruang letak dengan 500ms untuk kompilasi 1.
    const auto wait_time = TODO_WAIT_VALUE;

    while (true) {
        status_led = !status_led.read();
        ThisThread::sleep_for(wait_time);
    }
}

Sebelum menukar masa menunggu, ramalkan apa yang akan berlaku. Gunakan jawapan anda tentang pemasaan perubahan keadaan untuk memutuskan sama ada 1000ms harus menjadikan LED berubah lebih cepat, perlahan atau lebih kurang sama.

Sebelum ujian, apakah yang perlu dilakukan untuk menukar wait_time daripada 500ms kepada 1000ms?

Cara mencari LED yang berubah: selepas muat naik, bandingkan paparan kamera langsung sebelum dan selepas program bermula. Abaikan LED yang terus hidup atau terus mati, dan abaikan kelipan muat naik/status ringkas. Gunakan LED yang sentiasa berubah pada masa yang anda atur cara; apabila anda bertukar daripada 500ms kepada 1000ms, LED yang sama akan terus berubah pada masa baharu.

Kad makmal mempunyai butang Tandakan amalan sebagai selesai. Jangan klik lagi; gunakannya hanya selepas anda melengkapkan semua langkah bernombor, termasuk ujian semula 1000ms.

  1. Buka makmal STM32 Mbed CodeIDE daripada butang Buka makmal aktiviti ini.

  2. Dalam CodeIDE, buka main.cpp.

  3. Gantikan fail dengan program di atas dan gantikan TODO_WAIT_VALUE dengan 500ms.

  4. Cari main.cpp untuk TODO. Apabila carian tiada padanan, simpan. Compile hanya selepas disimpan.

  5. Pilih Compile untuk binaan 1. Jika berlaku ralat, semak penggantian TODO, ejaan, pendakap {}, kurungan () dan titik koma.

  6. Sebelum mengklik Upload, lihat kamera langsung sekali dan pilih kawasan papan yang anda akan tonton.

  7. Upload atur cara ke papan. Tunggu kawasan konsol/status menunjukkan bahawa muat naik/pengaturcaraan selesai.

  8. Tonton kawasan kamera yang sama dan cari LED yang berulang kali berubah pada masa yang anda aturkan. Abaikan sebarang LED kuasa/status sentiasa hidup dan muat naik/status berkelip singkat. Gunakan jam randik atau pemasa telefon: mulakan pemasaan apabila LED berulang berubah keadaan, kira lima perubahan lagi dan berhenti pada perubahan keenam yang kelihatan. Off-to-on dan on-to-off setiap dikira sebagai satu perubahan.

  9. Tukar wait_time daripada 500ms kepada 1000ms, simpan main.cpp, jalankan kompilasi 2, muat naik dan perhatikan kawasan LED yang sama sekali lagi.

  10. Hanya selepas langkah 9 selesai, klik Tandai amalan sebagai selesai.

Catatkan dua pemerhatian dalam kotak di bawah. Sebab pemasaan lima selang adalah praktikal: satu perubahan LED adalah pendek dan sukar untuk masa dengan tepat daripada kamera langsung, tetapi lima perubahan memberikan anggaran yang lebih stabil.

Gunakan kaedah ini untuk setiap versi:

1. Mulakan pemasa apabila LED berubah keadaan. Perubahan permulaan ini menandakan permulaan selang 1.
2. Kira perubahan seterusnya yang boleh dilihat dengan kuat atau di atas kertas: 1, 2, 3, 4, 5.
3. Hentikan pemasa pada perubahan yang anda kira sebagai 5. Tempoh masa anda kini meliputi lima selang perubahan keadaan.
4. Bahagikan tempoh masa dengan 5 untuk menganggarkan satu selang perubahan keadaan.
5. Kitaran sekelip mata penuh mengambil dua perubahan keadaan, jadi darabkan selang perubahan keadaan anda dengan 2.

Contoh: jika lima selang mengambil masa kira-kira 2.6 s, satu selang perubahan keadaan ialah kira-kira 0.52 s dan satu kitaran kelipan lengkap ialah kira-kira 1.04 s.

Untuk 500ms, tulis pemerhatian anda menggunakan format ini:

- Saya mengira 5 selang perubahan keadaan daripada LED berulang.
- Masa untuk 5 selang (s):
- Masa untuk 1 selang perubahan keadaan, kira-kira (s):
- Masa untuk 1 kitaran sekelip penuh, lebih kurang (s):
- Adakah ini sepadan dengan ramalan saya? ya/tidak, kerana...

Untuk 1000ms, tulis pemerhatian anda menggunakan format ini:

- Saya mengira 5 selang perubahan keadaan daripada LED berulang yang sama.
- Masa untuk 5 selang (s):
- Masa untuk 1 selang perubahan keadaan, kira-kira (s):
- Berbanding dengan 500ms, LED berubah dengan lebih pantas/lambat/kira-kira sama:
- Adakah ini sepadan dengan ramalan saya? ya/tidak, kerana...
- Penyelesaian masalah diperlukan? ya/tidak. Jika ya, apa yang berubah?

Tulis nota bukti daripada papan sebenar. Sertakan empat butiran: sama ada kompilasi/muat naik selesai, tempat perubahan LED muncul dalam paparan kamera langsung, perkara yang berubah pada kamera dan cara versi 1000 ms kelihatan berbeza daripada versi 500 ms. Contoh: "Kompilasi selesai, muat naik/pengaturcaraan selesai, dan LED berhampiran sebelah kiri kawasan papan berubah keadaan dengan lebih perlahan selepas saya menukar 500ms kepada 1000ms."

3

Memahami struktur Mbed

8 min

Kebanyakan program dalam kursus ini mengikut struktur Mbed OS yang sama: termasuk mbed.h, cipta objek perkakasan seperti DigitalOut, mulakan dalam int main(), dan letakkan gelagat pengawal berulang di dalam while (true).

Dalam perkataan anda sendiri, apakah yang while (true) lakukan dalam program blink ini? Mengapa ia diperlukan?

4

Serahkan kod anda

8 min

Sebelum menyerahkan, biarkan versi 1000ms terakhir disimpan dalam main.cpp. Cari sekali lagi untuk TODO; fail yang diserahkan mestilah tidak mengandungi ruang letak TODO.

Lampirkan main.cpp akhir anda yang disimpan

Klik Semak fail yang disimpan, sahkan bahawa main.cpp mengandungi program kelip 1000ms terakhir, kemudian klik Lampirkan kod yang disimpan. Selepas kod dilampirkan, klik Serah serahan di bahagian bawah aktiviti. Lampiran yang diperlukan untuk pelajaran ini ialah petikan kod main.cpp yang disimpan.