1. 代码
static void dev_DelaySoftInit(void)
{
/* 使能DWT */
if((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) == 0)
{
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
/* H7需要解锁DWT */
DWT->LAR = 0xC5ACCE55;
/* 使能CYCCNT */
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}
}
void dev_DelaySoftUs(uint32_t us)
{
//每次都要执行下,不然有坑
dev_DelaySoftInit();
uint32_t start = DWT->CYCCNT;
uint32_t ticks = us * (SystemCoreClock / 1000000U);
while ((DWT->CYCCNT - start) < ticks);
}
2. 坑
- 每次延时都要执行下
dev_DelaySoftInit();,不然会出现如下问题:- debug模式正常
- 正常运行(连着下载器)不正常
- 正常运行(拔掉下载器),重启,正常

159

被折叠的 条评论
为什么被折叠?



