Di perpustakaan Peripheral Standar STM32, kita perlu mengkonfigurasi GPIO.
Tetapi ada 3 fungsi yang saya tidak yakin cara mengkonfigurasinya;
- GPIO_InitStructure.GPIO_Speed
- GPIO_InitStructure.GPIO_OType
- GPIO_InitStructure.GPIO_PuPd
Di GPIO_Speed , ada 4 pengaturan untuk dipilih
GPIO_Speed_2MHz /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz
Bagaimana saya tahu kecepatan yang saya pilih? Apakah ada kelebihan atau kekurangan menggunakan kecepatan tinggi atau kecepatan rendah? (mis: konsumsi daya?)
Di GPIO_OType , ada 2 pengaturan untuk dipilih
GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain
Bagaimana cara mengetahui mana yang harus dipilih? dan apakah drain terbuka dan push pull?
Di GPIO_PuPd , ada 3 pengaturan untuk dipilih
GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP // Pull up
GPIO_PuPd_DOWN // Pull down
Saya pikir pengaturan ini terkait dengan pengaturan awal push pull.
Jawaban:
GPIO_PuPd (Pull-up / Pull-down)
Dalam sirkuit digital, penting bahwa garis sinyal tidak pernah diizinkan untuk "mengambang". Artinya, mereka harus selalu dalam kondisi tinggi atau rendah. Saat mengambang, keadaan tidak dapat ditentukan, dan menyebabkan beberapa jenis masalah.
Cara untuk memperbaikinya adalah dengan menambahkan resistor dari jalur sinyal ke Vcc atau Gnd. Dengan begitu, jika saluran tidak aktif didorong tinggi atau rendah, resistor akan menyebabkan potensi melayang ke tingkat yang diketahui.
ARM (dan mikrokontroler lainnya) memiliki sirkuit bawaan untuk melakukan ini. Dengan begitu, Anda tidak perlu menambahkan bagian lain ke sirkuit Anda. Jika Anda memilih "GPIO_PuPd_UP", misalnya, sama saja dengan menambahkan resistor antara garis sinyal dan Vcc.
GPIO_OType (Jenis Output):
Push-Pull: Ini adalah tipe output yang kebanyakan orang anggap sebagai "standar". Ketika output menjadi rendah, secara aktif "ditarik" ke ground. Sebaliknya, ketika output diatur ke tinggi, secara aktif "didorong" ke arah Vcc. Sederhana, tampilannya seperti ini:
Output Open-Drain, di sisi lain, hanya aktif dalam satu arah. Ini dapat menarik pin ke tanah, tetapi tidak dapat mendorongnya tinggi. Bayangkan gambar sebelumnya, tetapi tanpa MOSFET atas. Ketika tidak menarik ke tanah, MOSFET hanya non-konduktif, yang menyebabkan output melayang:
Untuk jenis output ini, perlu ada resistor pull-up yang ditambahkan ke sirkuit, yang akan menyebabkan garis naik tinggi ketika tidak didorong rendah. Anda dapat melakukan ini dengan bagian eksternal, atau dengan mengatur nilai GPIO_PuPd ke GPIO_PuPd_UP.
Namanya berasal dari fakta bahwa saluran MOSFET tidak terhubung secara internal dengan apa pun. Jenis output ini juga disebut "kolektor terbuka" saat menggunakan BJT, bukan MOSFET.
GPIO_Speed
Pada dasarnya, ini mengontrol laju perubahan tegangan (waktu naik dan turun) sinyal keluaran. Semakin cepat laju perubahan tegangan, semakin banyak noise yang dipancarkan dari sirkuit. Ini adalah praktik yang baik untuk menjaga laju perubahan tegangan lambat, dan hanya meningkatkannya jika Anda memiliki alasan tertentu.
sumber
Kecepatan GPIO adalah frekuensi maksimum yang dapat dihasilkan oleh GPIO. Pengaturan yang lebih rendah dapat menghemat daya.
Jenis keluaran adalah apakah pin menyatakan tinggi dan rendah (push pull), atau apakah output menyala di gerbang FET yang terpasang ke pin di saluran pembuangan (Open drain). Ini bisa nyaman jika Anda membutuhkan pin yang terpasang untuk dapat menarik bus rendah tanpa pin pendek keluar lainnya.
Tarik ke atas resistor pasang output pin ke power rail, dan tarik ke bawah menempelkan itu melalui resistor ke tanah. Ini akan, antara lain, mengontrol tegangan pin bahkan jika bit dalam keadaan impedansi tinggi. Ini penting untuk melakukan hal-hal seperti menggunakan spot switch untuk mengubah nilai input digital. Bahkan dengan sakelar terbuka, inputnya dapat diprediksi.
sumber