公司动态
STM32单片机标准库—DWT定时
DWT定时#include core_cm3.h // 必须包含定义 DWT 结构体 // 启用 DWT 计数器 #define DWT_CR *(volatile uint32_t *)0xE0001000 #define DWT_CYCCNT *(volatile uint32_t *)0xE0001004 #define DEM_CR *(volatile uint32_t *)0xE000EDFC #define DEM_CR_TRCENA (1 24) #define DWT_CR_CYCCNTENA (1 0) void DWT_Init(void) { // 使能追踪模块 DEM_CR | DEM_CR_TRCENA; // 使能循环计数器 DWT_CR | DWT_CR_CYCCNTENA; // 清空计数器 DWT_CYCCNT 0; } /** * brief 使用 DWT 实现微秒级延时 * param us: 延时微秒数 */ void DWT_Delay_us(uint32_t us) { uint32_t start_ticks DWT_CYCCNT; // 72MHz - 1us 72 ticks uint32_t target_ticks us * (SystemCoreClock / 1000000UL); while ((DWT_CYCCNT - start_ticks) target_ticks); } /** * brief 毫秒级延时 (基于 DWT) */ void DWT_Delay_ms(uint32_t ms) { uint32_t start_ticks DWT_CYCCNT; // 72MHz - 1us 72 ticks uint32_t target_ticks ms * (SystemCoreClock / 1000UL); while ((DWT_CYCCNT - start_ticks) target_ticks); }