GD32入门到实战20--定时器
GD32F303ZET6为例
我们看芯片的数据手册可以知道定时器0~13都可以配置为120Mhz的主频
我们新建timing文件编写定时器的代码timing_drv.c
#include <stdio.h>
#include "gd32f30x.h"
#include "led_drv.h"static void TimerInit(uint32_t periodUs)
{timer_parameter_struct timerInitPara;timer_struct_para_init(&timerInitPara);//给定时器结构体赋初值/*使能定时器时钟*/rcu_periph_clock_enable(RCU_TIMER0);//定时器0/*复位定时器*/timer_deinit(TIMER0);/*设置预分频*/timerInitPara.prescaler = 120 - 1;//时钟频率为1Mhz,周期为1us/*设置自动重装载值*/timerInitPara.period = periodUs - 1;/*初始化定时器*/timer_init(TIMER0,&timerInitPara);/*使能定时器的计数更新中断*/timer_interrupt_enable(TIMER0,TIMER_INT_UP);//向上计数到预设值产生中断/*使能定时器中断优先级*/nvic_irq_enable(TIMER0_UP_IRQn, 0, 0);/*使能定时器*/timer_enable(TIMER0);
}void TIMER0_UP_IRQnHandler(void)
{if(timer_interrupt_flag_get(TIMER0 , TIMER_INT_FLAG_UP) == SET)//判断是否产生中断{timer_interrupt_flag_clear(TIMER0 , TIMER_INT_FLAG_UP);//清除中断标志位ToggleLed(LED1);//翻转led1电平}
}void TimingDrvInit()
{TimerInit(1000);
}
timing_drv.h
#ifndef _TIMING_DRV_H_
#define _TIMING_DRV_H_void TimingDrvInit();#endif