SysTick STM32

SysTick termasuk fungsi core chip ARM. Jadi chip dengan label ARM punya STM32 kecipratan fasilitas ini. CMSIS ada pada bagian header cm4.h untuk STM32F4xx.

Perhatian! Sedang tidak di depan Komputer / STM32 board.

Setelah reset, default clock yang digunakan adalah HSI 16MHz. Sedang counter SysTick adalah 24bit down counter. Mengapa 24bit? Mungkin karena counter ini bisa menampung nilai 16000000.

Nilai maksimal counter 24bit  adalah 0xFFFFFF jika dikonversi ke desimal adalah 16777215.  Sedang nilai 16000000 kalau di konversi ke hexa adalah 0xF42400. Ada extra space sedikit hehe.

Setiap counter SysTick bernilai 0, maka Flag akan muncul. Fasilitas interupt juga tersedia pada SysTick.

Ceritanya, jika counter diisi nilai 16000000 (tepatnya 16000000-1), dengan clock sebesar 16MHz, maka diperlukan waktu 1 detik agar counter bernilai 0.

Jika diisi 16000-1, maka counter perlu waktu 1mS untuk mencapai 0. Jadi setiap 1mS flag akan muncul.

Jika ingin setiap 7ms? Tinggal kalikan saja 7×16000= 112000. Tepatnya counter diisi 112000-1.

Kalau digunakan prescaler AHB/8, maka frekuensi yang masuk counter 16MHz/8=2MHz. Jika counter diisi 2000000, maka flag akan muncul setiap detik. Jika ingin tick setiap 1mS, isi counter dengan nilai 2000.

Bagaimana kalau pakai  eksternal clock atau HSE? Misal nilai AHB maksimal 100MHz. Jika langsung masuk ke counter SysTick, maka counter 24bit tidak bisa diisi nilai 100000000 Karena nilai maksimal 16777215. Yang terjadi nilai ini hanya diambil 24 bit. Sisanya tidak kepakai.

OK kalau dengan clock 100MHz, sedang nilai counter diisi 10000000, berapa lama flag akan muncul? Tinggal dibagi saja 10^7/10^8= 1/10 detik.

Kalau diisi 100? Maka flag akan muncul setiap 100/10^8=10^(-6) detik. Atau 1uS.

SysTick punya prescaler untuk AHB/8. Fasilitas ini bisa dipakai. Jika nilai AHB 100MHz dibagi 8 akan bernilai 12500000. Ini akan lebih mudah diolah Karena nilai masih dibawah 16000000.

Jika counter diisi 12500000-1, maka flag akan muncul setiap 1 detik. Jika counter diisi 12500, maka flag akan nongol setiap 1mS.

Kesimpulan :

Untuk perhitungan, isi nilai counter maksimal 16000000, (Yach angka 16000000 lebih mudah diingat daripada 16777215). Jika clock AHB lebih dari 16MHz, gunakan prescaler AHB/8.

___________________

Untuk contoh, bisa cek di Github

Bagian SysTick ada di bawah ini :

Konfigurasi manual SysTick ala CMSIS. CMSIS menyediakan fungsi SysTick_Config. Isinya kurang lebih sama.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s