通用定时Tim1实现LED的闪烁
1、我们设置Tim1 间隔100ms改变LED的状态,实现LED的闪烁。
2、Tim1的配置
1⃣️、新建timer.c timer.h 文件
timer.c
//定时器配置
void timer_config(void)
{
/* -----------------------------------------------------------------------
系统主频108MHZ,timer_initpara.prescaler为1079,timer_initpara.period为9999,
频率就为10HZ,100ms进一次中断
----------------------------------------------------------------------- */
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER1);
timer_deinit(TIMER1);
/* TIMER1 configuration */
timer_initpara.prescaler = 1079;
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(TIMER1,&timer_initpara);
nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
nvic_irq_enable(TIMER1_IRQn, 0, 1);
timer_interrupt_enable(TIMER1, TIMER_INT_UP);
/* auto-reload preload enable */
timer_auto_reload_shadow_enable(TIMER1);
/* auto-reload preload enable */
timer_enable(TIMER1);
}
timer.h
#ifndef __TIMER_H__
#define __TIMER_H__
#include "gd32f30x_libopt.h"
#include "gd32f30x.h"
#include "type.h"
void timer_config(void);
#endif
2⃣️、LED的配置
LED灯接PB4管脚,配置代码如下
gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);//下载口NJTRST引脚当做普通I/O口
rcu_periph_clock_enable(RCU_GPIOB);//PB时钟使能
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);//PB4配置成输出
3、中断处理函数
在Application工程的gd32f30x_it.c中添加以下代码。
uint8_t LedFlag;
void TIMER1_IRQHandler(void)
{
timer_flag_clear(TIMER1,TIMER_FLAG_UP);
LedFlag^=0x01;
if(LedFlag)//计数到500ms,翻转输出
{
gpio_bit_set(GPIOB,GPIO_PIN_4);//PB4输出高电平
}else
{
gpio_bit_reset(GPIOB,GPIO_PIN_4);//PB4输出低电平
}
}
4、开机验证。
间隔100ms拉高拉低一次。
5、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git