Files
VoiletBspStm32F10x/Bsp/Src/Delay.c
T
2026-05-24 16:29:34 +08:00

65 lines
1.2 KiB
C

#include "Bsp.h"
#define DEM_CR *(volatile u32 *)0xE000EDFC
#define DWT_CR *(volatile u32 *)0xE0001000
#define DWT_CYCCNT *(volatile u32 *)0xE0001004
#define DEM_CR_TRCENA (1 << 24)
#define DWT_CR_CYCCNTENA (1 << 0)
/**
* @brief 初始化延时函数
* @param void
* @retval void
* @note void
* @example void
*/
void SystemDelayConfig(void)
{
DEM_CR |= DEM_CR_TRCENA;
DWT_CR |= DWT_CR_CYCCNTENA;
DWT_CYCCNT = 0;
}
/**
* @brief 读取DWT计数器的值
* @param void
* @retval void
* @note void
* @example void
*/
uint32_t SystemGetDwtCnt(void)
{
return((uint32_t)DWT_CYCCNT);
}
/**
* @brief 微秒级延时函数
* @param void
* @retval void
* @note void
* @example void
*/
void SystemDelayUs(uint32_t Us)
{
uint32_t Start = 0,End = 0,Ts = 0;
Start = SystemGetDwtCnt();
Ts = Us * (SystemCoreClock / 1000000U);
End = Start + Ts;
while(SystemGetDwtCnt() < End){;}
}
/**
* @brief 毫秒级延时函数
* @param void
* @retval void
* @note void
* @example void
*/
void SystemDelayMs(uint32_t Ms)
{
SystemDelayUs(Ms * 1000);
}