关于stm32可用的DWT模块(数据观察点和跟踪单元)中包含的非常有用的内容的小注释。
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;
在72 MHz的频率下测得的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);
完成的文件可以在
这里获取 。
仅此而已。