GD32VF103 定时器同样有分别,分为几种类型:高级定时器(TIMER0),通用定时器L0(TIMER1,2,3,4),基本定时器(TIMER5,6)
不同类型的定 时器具体功能有所差别。功能依然很多。-&_&-
timer.c
#include "timer.h"
#include "gd32vf103.h"
#include "gd32vf103_libopt.h"
#include "led.h"
// ************************************************************************************************************** //
//TIMER0 基础定时初始化
void TIMER0_Init()
{
timer_parameter_struct timer_initpara; //定时器结构体
rcu_periph_clock_enable(RCU_TIMER0); //使能TIMER0时钟
timer_deinit(TIMER0);
timer_struct_para_init(&timer_initpara); //将结构体参数变为初始值
timer_initpara.prescaler = 10799; //预分频
timer_initpara.alignedmode = TIMER_COUNTER_EDGE; //对齐模式
timer_initpara.counterdirection = TIMER_COUNTER_UP; //计数方向
timer_initpara.period = 9999; //周期
timer_initpara.clockdivision = TIMER_CKDIV_DIV4; //时钟分频
timer_initpara.repetitioncounter = 0; //重复计数器
timer_init(TIMER0, &timer_initpara);
timer_interrupt_enable(TIMER0,TIMER_INT_UP); //使能更新中断
eclic_irq_enable(TIMER0_UP_IRQn,2,0); //使能中断线
timer_enable(TIMER0);
}
// ************************************************************************************************************** //
//TIMER0 中断服务函数
uint8_t TIMER0_i = 0;
void TIMER0_UP_IRQHandler(void)
{
if(timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_UP) != RESET) //接收中断
{
timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP); //清除中断标志位
TIMER0_i++;
printf("TIMER0 更新中断触发-->> %d \n\r",TIMER0_i);
}
}
timer.h
#ifndef __TIMER_H__
#define __TIMER_H__
#include "gd32vf103.h"
#include "systick.h"
#include "stdio.h"
#include "string.h"
// ************************************************************************************************************** //
//函数体声明
void TIMER0_Init(void);
void TIMER0_UP_IRQHandler(void);
#endif
main.c
#include "gd32vf103.h"
#include "gd32vf103c_start.h"
#include "systick.h"
#include <stdio.h>
#include <string.h>
#include "led.h"
#include "key.h"
#include "usart0.h"
#include "timer.h"
// ************************************************************************************************************* //
//主函数
int main(void)
{
uint8_t key = 0;
eclic_global_interrupt_enable();
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
LED_Init(); //LED灯初始化
KEY_Init(); //KEY按键初始化
USART0_Init(); //USART0初始化
TIMER0_Init(); //TIMER0初始化
printf("串口测试 USART TEST 0123456789 \n\r");
while(1)
{
key = KEY_Scan();
if(key == 1) {printf("按键按下 LED 反转 \n\r");}
}
}
个人见解,感谢阅读。