打印
[研电赛技术支持]

GD32毫秒和微秒延时函数

[复制链接]
103|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-1-7 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "gd32f4xx.h"

/**
* @Author: ChenSong
* @description: 毫秒级延时函数,使用系统的滴答定时器实现
* @param {volatile uint32_t} cnt 延时时间(单位:毫秒)
* @return {*}
*/
void bsp_delay_ms(volatile uint32_t u32Cnt)
{
    uint32_t u32end;

    SysTick->LOAD = 0xFFFFFF;
    SysTick->VAL  = 0;
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;

    while(u32Cnt-- > 0)
    {
        SysTick->VAL  = 0;
        u32end = 0x1000000 - SystemCoreClock/1000;
        while(SysTick->VAL > u32end)
        {
        }
    }
    SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk));
}


/**
* @Author: ChenSong
* @description: 微秒级延时函数,使用系统的滴答定时器实现
* @param {volatile uint32_t} cnt 延时时间(单位:微秒)
* @return {*}
*/
void bsp_delay_us(volatile uint32_t u32Cnt)
{
    uint32_t u32end;

    SysTick->LOAD = 0xFFFFFF;
    SysTick->VAL  = 0;
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;

    while(u32Cnt-- > 0)
    {
        SysTick->VAL  = 0;
        u32end = 0x1000000 - SystemCoreClock/1000000;
        while(SysTick->VAL > u32end)
        {
        }
    }
    SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk));
}



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43848900/article/details/144846230

使用特权

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

本版积分规则

2048

主题

15996

帖子

15

粉丝