收藏官网首页
查看: 17692|回复: 1

不占用定时器和Systick的us级延时函数

321

主题

1054

帖子

4513

积分

论坛元老

Rank: 8Rank: 8

积分
4513
QQ
跳转到指定楼层
楼主
发表于 2017-4-21 20:07:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
汉枫LPB120模块
来自国外TM大神的函数库,不占用定时器和Systick的延时函数,利用了DWT:

uint32_t TM_DELAY_Init(void) {
#if !defined(STM32F0xx)
        uint32_t c;
       
    /* Enable TRC */
    CoreDebug->DEMCR &= ~0x01000000;
    CoreDebug->DEMCR |=  0x01000000;
       
    /* Enable counter */
    DWT->CTRL &= ~0x00000001;
    DWT->CTRL |=  0x00000001;
       
    /* Reset counter */
    DWT->CYCCNT = 0;
       
        /* Check if DWT has started */
        c = DWT->CYCCNT;
       
        /* 2 dummys */
        __ASM volatile ("NOP");
        __ASM volatile ("NOP");
       
        /* Return difference, if result is zero, DWT has not started */
        return (DWT->CYCCNT - c);
#else
        /* Return OK */
        return 1;
#endif
}
__STATIC_INLINE void Delay(__IO uint32_t micros) {
#if !defined(STM32F0xx)
        uint32_t start = DWT->CYCCNT;
       
        /* Go to number of cycles for system */
        micros *= (HAL_RCC_GetHCLKFreq() / 1000000);
       
        /* Delay till end */
        while ((DWT->CYCCNT - start) < micros);
#else
        /* Go to clock cycles */
        micros *= (SystemCoreClock / 1000000) / 5;
       
        /* Wait till done */
        while (micros--);
#endif
}



1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
沙发
发表于 2017-4-26 16:43:40 | 只看该作者
国外人学艺精,值得学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表