ملاحظة صغيرة حول شيء مفيد للغاية مدرج في وحدة DWT (Data Watchpoint and Trace unit) المتاحة من stm32.
وحدة DWT نفسها شيء معقد إلى حد ما (اقرأ
هنا ص 75) ، وهو مسؤول عن تصحيح الأخطاء. ومع ذلك ، نحن لا نتحدث عن الوحدة ككل ، ولكن عن أحد مكوناتها - عداد عقارب الساعة (يشار إليه فيما يلي باسم عداد DWT).
في الحقيقة ، عداد DWT هو مجرد سجل 32 بت ، تزداد قيمته بواحد مع كل دورة ساعة لاحقة. يمكننا الكتابة إلى هذا السجل وقراءته ، مما يعني أنه يمكننا استخدامه لقياس وقت تنفيذ بعض أجزاء البرنامج في التدابير ، وتنظيم التأخيرات الدقيقة الثانية. هذا العداد مستقل تمامًا.
لقياس وقت تنفيذ أي جزء من البرنامج أو الوظيفة ، يجب عليك القيام بذلك ...
#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;
تقاس HAL_Delay (1000) على تردد 72 ميغاهيرتز.لتنظيم توقف microsecond مؤقتًا ، تحتاج إلى إنشاء
delay_micros.h ملف.
#ifndef __DELAY_US_H__ #define __DELAY_US_H__ #ifdef __cplusplus extern "C" { #endif #include "main.h"
... وإضافته إلى المشروع.
في main.c إنشاء إدراج ...
#include "delay_micros.h"
قبل حلقة لا نهائية ، قم بتهيئة العداد ...
DWT_Init();
والتأخير يفعل ذلك ...
delay_us(100);
الملف النهائي يمكن أن تؤخذ
هنا .
هذا كل شيء.