打印

利用DWT进行精准延迟误差太大了

[复制链接]
389|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ST, tc, ck, TE, start
我采用内部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,不知道为什么会出现这种情况呢?和网上说的精度差距有点大

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

432

主题

439

帖子

0

粉丝