【GD32L233C-START评测】测评之四:使用定时器time中断实现1S跑马灯
[复制链接]
定时器初始化 : timer_initpara.prescaler
typedef struct {
uint16_t prescaler; /*!< prescaler value */
uint16_t alignedmode; /*!< aligned mode */
uint16_t counterdirection; /*!< counter direction */
uint32_t period; /*!< period value */
uint16_t clockdivision; /*!< clock division value */
} timer_parameter_struct;
取值范围:UInt16 - [0 : 65535]
完整程序
#include "gd32l23x.h"
#include "systick.h"
static uint32_t SystemTick=0;
void TIMER5_Config(void)
{
timer_parameter_struct timer_initpara; //计时器初始化参数结构定义
rcu_periph_clock_enable(RCU_TIMER5);
timer_deinit(TIMER5);
/*prescaler(预分频器值):64M/(6399+1)=10KHz
period(周期值) (9999+1)/10000=1000ms
*/
timer_initpara.prescaler = 6399;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 9999;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_init(TIMER5,&timer_initpara);
timer_interrupt_enable(TIMER5, TIMER_INT_UP);//使能TIMER5中断
nvic_irq_enable(TIMER5_IRQn, 0);//启用TIMER5的NVIC请求,优先级为0(0~3)
timer_auto_reload_shadow_enable(TIMER5);
timer_enable(TIMER5);
}
void TIMER5_IRQHandler(void)
{
static uint16_t timer_cont=0;
if(RESET != timer_interrupt_flag_get(TIMER5, TIMER_INT_FLAG_UP))
{
timer_cont++;
// if(timer_cont>5)
{
// timer_cont=0;
gpio_bit_toggle(GPIOA, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8);
gpio_bit_toggle(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
}
}
timer_interrupt_flag_clear(TIMER5, TIMER_INT_FLAG_UP);
}
uint32_t SystemGetTick(void)
{
return SystemTick;
}
void LedInit(void)
{
/* enable the LED GPIO clock */
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOC);
/* configure LED GPIO pin */
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6| GPIO_PIN_7 | GPIO_PIN_8);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7| GPIO_PIN_8);
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6 | GPIO_PIN_7);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
/* reset LED GPIO pin */
gpio_bit_reset(GPIOA, GPIO_PIN_6 | GPIO_PIN_8| GPIO_PIN_7);
gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
}
int main(void)
{
TIMER5_Config();
LedInit();
while(1)
{
}
}
现象:
|