【GD32L233C-START】2、非阻塞方式点灯,blink,blink,blink……
1、前言
官方demo使用的是阻塞方式点灯,这种方式让mcu在等待期间无法执行其他任务(中断除外),效率较低。本文介绍了一种非阻塞方式点灯的方法。
2、硬件连接
3、思路
通过定时器中断,每1ms触发一次中断,全系统维护一个tick计数器;
记录某个时刻的tick值为A,获取当前的tick值为B,当B-A的值大于或等于500时(即500ms闪烁一次),执行一次LED状态翻转,并更新A的值。
4、软件实现
(1)利用定时器中断,每1ms中断一次,全系统维护一个tick计数器
static uint32_t SystemTick=0;void Timer1Config(void){ nvic_irq_enable(TIMER1_IRQn, 0); timer_parameter_struct timer_initpara; /* 启用外设时钟 */ rcu_periph_clock_enable(RCU_TIMER1); /* 重置定时器 */ timer_deinit(TIMER1); /* 初始化定时器参数结构 */ timer_struct_para_init(&timer_initpara); /* 配置TIMER1 */ timer_initpara.prescaler = 63; timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 999; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_init(TIMER1, &timer_initpara); /* 清除通道0中断标志位 */ timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP); /* 启用定时器中断 */ timer_interrupt_enable(TIMER1, TIMER_INT_UP); /* 启动定时器 */ timer_enable(TIMER1);}登录后复制
