Una pequeña nota sobre algo muy útil incluido en el módulo DWT (unidad de seguimiento y seguimiento de datos) disponible en stm32.
El módulo DWT en sí es algo bastante complicado (lea
aquí p. 75), y él es responsable de la depuración. Sin embargo, no se trata del módulo en su conjunto, sino de uno de sus componentes: un contador de reloj (en adelante, el contador DWT).
De hecho, el contador DWT es solo un registro de 32 bits, cuyo valor aumenta en uno con cada ciclo de reloj posterior. Podemos escribir y leer desde este registro, lo que significa que podemos usarlo para medir el tiempo de ejecución de algunas partes del programa en medidas y organizar retrasos de microsegundos. Este contador es completamente independiente.
Para medir el tiempo de ejecución de cualquier parte de un programa o función, debe hacerlo ...
#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;
Medido HAL_Delay (1000) a una frecuencia de 72 MHz.Para organizar pausas de microsegundos, debe crear un archivo
delay_micros.h ...
#ifndef __DELAY_US_H__ #define __DELAY_US_H__ #ifdef __cplusplus extern "C" { #endif #include "main.h"
... y añádelo al proyecto.
En main.c crea una inclusión ...
#include "delay_micros.h"
Antes de un bucle infinito, inicialice el contador ...
DWT_Init();
Y la demora lo está haciendo ...
delay_us(100);
El archivo terminado se puede tomar
aquí .
Eso es todo