GD32F470定时器初始化函数及知识点讲解
我配置470主频为240Mhz,按需要在文件夹CMSIS的system_gd32f4xx.h里宏修改。
1. 定时器计时初始化函数
#include "gd32f4xx.h"
#include "gd32f4xx_timer.h"
// 定时器初始化函数
void TIMx_Init(void)
{
timer_parameter_struct timer_initpara;
// 使能定时器时钟
rcu_periph_clock_enable(RCU_TIMER1);
rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
timer_struct_para_init(&timer_initpara);
timer_deinit(TIMER1);
// 定时器配置
timer_initpara.prescaler = 239;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 9999;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIM_NUM[timnum], &timer_initpara);
// 使能自动重载预装载
timer_auto_reload_shadow_enable(TIMER1);
// 使能溢出中断
timer_interrupt_enable(TIMER1, TIMER_INT_UP);
// 配置中断优先级
nvic_irq_enable(TIMER1_IRQn, 3, 0);
// 启动定时器
timer_enable(TIMER1);
}
2. 定时器失能函数
以下是优化后的定时器失能函数,支持禁用定时器和相关功能。
// 定时器失能函数
void TIMx_DeInit(timer_typedef_enum timnum)
{
// 复位定时器并使能时钟
timer_deinit(TIM_NUM[timnum]);
rcu_periph_clock_enable(TIMx_CLK[timnum]);
rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
timer_parameter_struct timer_initpara;
timer_struct_para_init(&timer_initpara);
// 定时器配置
timer_initpara.prescaler = TIMx_PRESCALER[timnum];
timer_initpara