Catatan kecil tentang hal yang sangat berguna termasuk dalam modul DWT (Data Watchpoint and Trace unit) yang tersedia dari stm32.
Modul DWT itu sendiri adalah hal yang agak rumit (baca di
sini hlm. 75), dan ia bertanggung jawab atas debugging. Namun, kita tidak berbicara tentang modul secara keseluruhan, tetapi tentang salah satu komponennya - penghitung jam (selanjutnya penghitung DWT).
Faktanya, penghitung DWT hanyalah register 32-bit, nilainya bertambah satu dengan setiap siklus clock berikutnya. Kita dapat menulis dan membaca dari daftar ini, yang berarti kita dapat menggunakannya untuk mengukur waktu pelaksanaan beberapa bagian program dalam ukuran, dan mengatur penundaan mikrodetik. Penghitung ini sepenuhnya independen.
Untuk mengukur waktu eksekusi setiap bagian dari program atau fungsi, Anda perlu melakukannya ...
#define DWT_CYCCNT *(volatile uint32_t*)0xE0001004 #define DWT_CONTROL *(volatile uint32_t*)0xE0001000 #define SCB_DEMCR *(volatile uint32_t*)0xE000EDFC char str[16] = {0,}; uint32_t count_tic = 0; SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
Diukur HAL_Delay (1000) pada frekuensi 72 MHz.Untuk mengatur jeda mikrodetik, Anda perlu membuat file
delay_micros.h ...
#ifndef __DELAY_US_H__ #define __DELAY_US_H__ #ifdef __cplusplus extern "C" { #endif #include "main.h"
... dan tambahkan ke proyek.
Di main.c buat inklusi ...
#include "delay_micros.h"
Sebelum perulangan tanpa batas, inisialisasi penghitung ...
DWT_Init();
Dan penundaan itu melakukannya ...
delay_us(100);
File yang sudah selesai dapat diambil di
sini .
Itu saja.