我采用内部MSI时钟,4.194MHz,在利用DWT进行us延时的时候发现差距特别大,代码如下
void PUB_DelayInit(WORD32 SYSClock)
{
SystemCoreClock = SYSClock;
DEM_CR |= (unsigned int)DEM_CR_TRCENA; // 开启DWT调试
DWT_CYCCNT = (unsigned int)0u; // 清零
DWT_CR |= (unsigned int)DWT_CR_CYCCNTENA; // 使能
}
void PUB_DelayUs(WORD16 us)
{
WORD32 tCnt, tDelayCnt;
WORD32 tStart;
tStart = DWT_CYCCNT; // 刚进入时的计数器值
tCnt = 0;
tDelayCnt = us * (SystemCoreClock/1000000.0); // 需要的节拍数
while(tCnt < tDelayCnt)
{
tCnt = DWT_CYCCNT - tStart;
}
}
先进行PUB_DelayInit(4194000);然后调用PUB_DelayUs(5),示波器观察是10us,不知道为什么会出现这种情况呢?和网上说的精度差距有点大 |