RISC-V_GD32VF103-TIMER0 定时器中断

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");}
    }
}

个人见解,感谢阅读。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值