Mendeteksi saklar sesaat mana yang menyebabkan cpu STM32 untuk bangun

10

Sunting : Pertanyaan ini salah. Stm325105 hanya memiliki satu pin bangun. Tetapi bagian-ST lainnya memiliki lebih dari satu pin bangun, jadi jawaban yang diberikan berlaku untuk mereka.


Saya memiliki stm32f105 yang memiliki dua tombol sesaat yang terhubung ke input wakeup. Prosesor dimasukkan ke dalam MODE STANDBY. Ketika salah satu tombol ditekan, atau timer RTC menyala, cpu terbangun.

Masalahnya adalah saya ingin CPU melakukan hal yang berbeda tergantung pada input wakeup yang dipicu. Menurut 5.3.5 dari manual referensi stm32f105xx ST , tidak ada register yang disimpan kecuali untuk register status yang menunjukkan bahwa kami telah dibangunkan (tetapi tidak oleh siapa) dan 42 register cadangan.

Mode Siaga memungkinkan untuk mencapai konsumsi daya terendah. Ini didasarkan pada mode deepsleep Cortex ® -M3, dengan regulator tegangan dinonaktifkan. Akibatnya, domain 1,8 V dimatikan. PLL, osilator HSI, dan osilator HSE juga dimatikan. Konten SRAM dan register hilang kecuali untuk register di domain Cadangan dan sirkuit Siaga.

Setelah bangun dari mode Standby, eksekusi program restart dengan cara yang sama seperti setelah Reset (pengambilan sampel pin, reset vektor diambil, dll.). Bendera status SBF dalam daftar Kontrol daya / status (PWR_CSR) menunjukkan bahwa MCU dalam mode Siaga.

Posting forum ST ini, Bagaimana menentukan asal dari Wakeup dari Siaga? , menyarankan agar saya tidak dapat mendeteksi wakeup yang dipicu oleh perangkat lunak. Saya tidak menemukan tulisan lain di sana yang memberikan pencerahan lagi.

Bagaimana saya bisa menggunakan perangkat lunak atau perangkat keras untuk menentukan, setelah bangun, input wakeup yang dipicu?

Daniel Näslund
sumber
1
Mintalah tombol mengisi tutup dan membacanya
PlasmaHH
1
Mencari beberapa varian STM32F105, mereka hanya memiliki satu pin wakeup. Bagian mana yang Anda maksudkan dengan tepat, dan pin yang mana?
berendi - memprotes
@berendi STM32F105 saya, seperti yang Anda katakan, hanya memiliki satu pin bangun. Ini dikonfigurasi dalam STOP MODE, bukan mode STANDBY seperti yang saya nyatakan dalam pertanyaan saya. Ini menggunakan acara EXTI untuk bangun. Saya telah mencampur arti "acara EXTI" itu dengan "pin bangun". Tapi saya kira jawaban yang diberikan oleh Olin masih berguna jika seseorang perlu membedakan antara "dibangunkan oleh RTC" atau "dibangunkan oleh wakeup pin" dalam STANDBY MODE. Adakah yang punya saran tentang bagaimana mengedit pertanyaan ini agar sesuai dengan jawaban Olins? Catatan kecil di awal menggambarkan apa yang salah? En seluruh edit ulang? Atau haruskah saya menghapus seluruh pertanyaan?
Daniel Näslund
1
Ada pengontrol ST dengan lebih dari satu pin wakeup, seperti F0, F3, L0, atau L1, di mana sumbernya memang tidak dapat ditentukan setelah keluar dari standby, karena mereka memiliki flag input wakeup tunggal. ST telah memperbaiki pengawasan ini terlebih dahulu dalam seri F7 dan L4 terbaru, yang memiliki flag terpisah untuk setiap input wakeup.
berendi - memprotes

Jawaban:

11

Saya tidak tahu detail bagian ST ini, jadi saya akan menganggap deskripsi Anda tentang hal itu benar.

Prosesor harus bangun segera setelah salah satu tombol ditekan. Ini harus benar terutama jika ia memiliki osilator RC internal. Bahkan jika Anda harus lari dari kristal pada akhirnya untuk alasan akurasi, mungkin Anda dapat memiliki bagian mulai dari RC internal, kemudian beralih ke kristal nanti. Ada micros yang dapat melakukan hal-hal seperti itu, meskipun saya tidak tahu apakah Anda adalah salah satunya.

Bagaimanapun, Anda membaca kedua input sesegera mungkin setelah bangun. Kecuali ada sesuatu yang tidak biasa pada mikro ST ini, yang seharusnya dari ms hingga 10s ms dari tombol tekan.

Untuk menjamin saluran masih rendah, gunakan kapasitor untuk menjaga saluran tetap rendah hingga 100 ms setelah tombol dilepaskan.

Sebagai contoh, katakanlah tingkat input rendah logika dijamin adalah 20% dari tegangan suplai. Saluran ditarik dengan resistor, dan memiliki kapasitor ke ground. Tombol memendekkan garis ke tanah. Oleh karena itu, garis melayang tinggi, dan secara aktif dipaksa ke tanah ketika tombol ditekan. Ketika tombol dilepaskan, tegangan secara eksponensial berkurang ke arah suplai.

Pembusukan hingga 20% dari nilai akhir terjadi dalam konstanta waktu 0,22. Katakanlah Anda ingin menjamin saluran terlihat rendah untuk 100 ms setelah tombol ditekan. Itu berarti konstanta waktu RC harus 450 ms. Dengan penarikan 100 kΩ, kapasitansi harus 4,5 μF. Jadi 4,7 μF 10 V tutup akan melakukannya dengan baik.

Singkatnya, inilah sirkuitnya:

Olin Lathrop
sumber
1
Seharusnya sebaliknya, STM32s bangun di tepi naik. Juga, afaik mereka selalu mulai dengan jam internal, beralih ke kristal eksternal dan PLL dilakukan oleh perangkat lunak. Masalahnya adalah dengan kode startup yang disediakan atau dihasilkan oleh alat CubeMX, yang membuatnya agak sulit untuk menjalankan kode pengguna sebelum pengaturan pohon jam.
berendi - protes