एक बहुत ही उपयोगी चीज के बारे में एक छोटा सा नोट जो DWT मॉड्यूल (डेटा वॉचपॉइंट और ट्रेस यूनिट) में stm32 से उपलब्ध है।
DWT मॉड्यूल अपने आप में एक जटिल चीज़ है (
यहाँ पढ़ें
। पी 75), और वह डिबगिंग के लिए जिम्मेदार है। हालांकि, हम समग्र रूप से मॉड्यूल के बारे में बात नहीं कर रहे हैं, लेकिन इसके घटकों में से एक के बारे में - एक घड़ी काउंटर (इसके बाद 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;
72 मेगाहर्ट्ज की आवृत्ति पर HAL_Delay (1000) मापा जाता है।माइक्रोसेकंड पॉज़ को व्यवस्थित करने के लिए, आपको एक फ़ाइल
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);
तैयार फाइल
यहां ली जा सकती
है ।
वह सब है।