【GD32L233C-START】2、非阻塞方式点灯,blink,blink,blink……

2025-04-27阅读 0热度 0
定时器 ai

1、前言

官方demo使用的是阻塞方式点灯,这种方式让mcu在等待期间无法执行其他任务(中断除外),效率较低。本文介绍了一种非阻塞方式点灯的方法。

2、硬件连接

【GD32L233C-START】2、非阻塞方式点灯,blink,blink,blink……

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);}
登录后复制
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策