Debugging pada STM32 bukan sekadar mencari error compile. Tujuannya adalah menjalankan program secara bertahap sambil melihat nilai variabel, register, peripheral, dan aliran eksekusi secara real-time.
Untuk kasus STM32G474RE + STM32CubeIDE + PWM TIM1, alurnya seperti ini:
1. Build program
Di STM32CubeIDE:
Project → Build Project
Periksa bagian Console.
-
0 errors→ program berhasil dikompilasi. -
warning→ belum tentu fatal. -
error→ program belum bisa di-debug.
2. Pastikan debugger ST-LINK
Nucleo-G474RE sudah memiliki ST-LINK onboard.
Hubungkan USB dari PC ke konektor ST-LINK USB pada board.
Kemudian:
Run → Debug As → STM32 Cortex-M C/C++ Application
CubeIDE akan masuk ke Debug Perspective.
3. Pasang Breakpoint
Breakpoint adalah titik tempat CPU berhenti sementara.
Misalnya program:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
while (1)
{
HAL_Delay(100);
}
Pasang breakpoint pada:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
Caranya:
double-click nomor baris di sebelah kiri kode.
Akan muncul tanda breakpoint.
Ketika program berjalan dan mencapai baris tersebut, CPU berhenti.
4. Gunakan tombol utama Debug
Di toolbar Debug biasanya ada:
| Tombol | Fungsi |
|---|---|
| ▶ Resume | Melanjutkan program |
| ⏸ Suspend | Menghentikan CPU |
| ↪ Step Into | Masuk ke dalam fungsi |
| ↷ Step Over | Menjalankan satu baris |
| ↩ Step Return | Keluar dari fungsi |
| ⏹ Terminate | Menghentikan debugging |
Yang paling sering digunakan adalah:
Breakpoint → Resume → lihat nilai → Step Over
5. Contoh debugging PWM TIM1
Misalnya Anda ingin:
TIM1_CH1 → PA8 → PWM 1 kHz → duty cycle 50%
Konfigurasi:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
Kemudian:
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500);
Jika:
ARR = 999
CCR1 = 500
maka secara sederhana:
6. Periksa variabel dengan Watch
Saat breakpoint aktif, buka:
Window → Show View → Expressions
Tambahkan:
htim1.Instance
htim1.Init.Prescaler
htim1.Init.Period
Untuk PWM, yang paling penting:
TIM1->PSC
TIM1->ARR
TIM1->CCR1
Misalnya hasil:
PSC = 169 ARR = 999 CCR1 = 500
berarti kita dapat memeriksa konfigurasi PWM langsung dari register hardware.
7. Debug register TIM1
Ini bagian yang sangat penting untuk STM32.
Jangan hanya melihat kode C. Periksa juga register peripheral.
Buka:
Window → Show View → SFRs
atau gunakan Live Expressions/Expressions.
Perhatikan:
TIM1->PSC TIM1->ARR TIM1->CCR1 TIM1->CR1 TIM1->CCMR1 TIM1->CCER TIM1->BDTR
Contoh interpretasi:
| Register | Yang diperiksa |
|---|---|
| PSC | Prescaler |
| ARR | Periode PWM |
| CCR1 | Duty cycle CH1 |
| CR1 | Counter configuration |
| CCMR1 | PWM mode |
| CCER | Channel enable |
| BDTR | Main Output Enable |
8. Mengapa TIM1 berbeda dari timer biasa?
TIM1 adalah Advanced-Control Timer.
Ini penting.
Untuk PWM TIM1/TIM8 terdapat konsep Main Output Enable (MOE) melalui register:
TIM1_BDTR
Bit penting:
MOE = 1
Jika konfigurasi timer terlihat benar tetapi output PWM tidak muncul, BDTR/MOE perlu diperiksa.
Namun jika Anda menggunakan:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL biasanya menangani kebutuhan output utama tersebut untuk penggunaan PWM normal.
9. Debug GPIO PA8
TIM1_CH1 pada konfigurasi umum dapat menggunakan:
PA8
PA8 tidak boleh dikonfigurasi sebagai GPIO Output biasa jika ingin menghasilkan PWM hardware.
Harus menjadi:
PA8 AF1 TIM1_CH1
Di CubeMX:
Pinout → PA8 → TIM1_CH1
Kemudian GPIO akan dikonfigurasi sebagai Alternate Function.
Secara konsep:
TIM1
│
└── CH1
│
▼
PA8
│
▼
PWM OUT
10. Debug frekuensi PWM
Misalnya clock TIM1:
TIM1CLK = 170 MHz
Prescaler:
PSC = 169
Maka:
Jika:
ARR = 999
maka:
Jadi konfigurasi:
TIM1CLK = 170 MHz PSC = 169 ARR = 999 CCR1 = 500
menghasilkan kira-kira:
PWM = 1 kHz Duty = 50%11. Jika PWM tidak keluar
Gunakan urutan debugging berikut:
PROGRAM │ ▼ HAL_TIM_PWM_Start() │ ▼ TIM1 berjalan? / \ NO YES │ │ ▼ ▼ cek clock cek CH1 │ ▼ PA8? / \ NO YES │ │ ▼ ▼ cek AF1 cek CCR1 │ ▼ cek CCER │ ▼ cek BDTR │ ▼ OSCILLOSCOPE
12. Debug dengan oscilloscope
Setelah software benar, ukur:
PA8 ───────── Oscilloscope CH1 GND ───────── Oscilloscope GND
Jika target:
Frequency = 1 kHz Duty = 50%
maka waveform kira-kira:
3.3V ┌───────┐ ┌───────┐ │ │ │ │ 0V ───┘ └───────┘ └──── 0.5 ms 0.5 ms <------ 1 ms --------->
Catatan: level logika STM32G474RE umumnya 3.3 V; jangan menghubungkan output PA8 langsung ke beban yang membutuhkan tegangan lebih tinggi.

0 komentar:
Posting Komentar