[研电赛技术支持] GD32F450VI 定时器使用笔记

[复制链接]
1430|0
Zuocidian 发表于 2025-9-6 13:20 | 显示全部楼层 |阅读模式
timer0挂在APB1上,GD固件库时钟初始化,默认会4分频(200M主频,会50M)

volatile uint8_t TIM1_FLAG = 0;
// 定时器1初始化函数
void timer1_init(void)
{
    // 使能定时器1时钟
    rcu_periph_clock_enable(RCU_TIMER1);

    //将定时器的频率倍频到200M
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);

    // 定时器去初始化
    timer_deinit(TIMER1);

    /* 定时器配置 */
    timer_parameter_struct timer_initpara = {0};
    timer_initpara.prescaler         = 99;      // 预分频值
    //timer_initpara.prescaler         = 49;      // 预分频值
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 999;     // 自动重载值
    //timer_initpara.period            = 499;     // 自动重载值   
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
     //    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER1, &timer_initpara);

    /* 计算说明:
       APB1时钟 = 50MHz,倍频到200M
       预分频后时钟 = 200MHz / (99+1) = 2MHz
       计数周期 = (999+1) / 2MHz = 500us
    */
    timer_auto_reload_shadow_enable(TIMER1);
    // 使能定时器更新中断
    timer_interrupt_enable(TIMER1, TIMER_INT_UP);

    // 使能定时器
    timer_enable(TIMER1);

    // 配置NVIC
    nvic_irq_enable(TIMER1_IRQn, 1, 0);  
}

// 定时器1中断处理函数
void TIMER1_IRQHandler(void)
{
    if(timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_UP) != RESET) {
        // 清除中断标志
        timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP);

        // 中断处理代码
        TIM1_FLAG = 1;

    }
}
————————————————
版权声明:本文为CSDN博主「qvictory」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qvictory/article/details/150954061

您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

240

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部