3165|1

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

【GD32E503评测】 如何开启定时器中断? [复制链接]

 

    在我的简易示波器实验中,ADC转换的代码是放在主循环中,转换的频率不容易控制,我准备利用定时器中断的功能来实现固定转换的频率,但没有找到现成的定时器中断设置和处理的代码,我参照范例写了下列代码来设置定时器2:

  • //设置定时器2(Test100ms)
  • timer_initpara.prescaler = 1799; //8999;
  • timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
  • timer_initpara.counterdirection = TIMER_COUNTER_UP;
  • timer_initpara.period = 9999; //9999;
  • timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
  • timer_initpara.repetitioncounter = 0;
  • timer_init(TIMER2, &timer_initpara);
  • timer_interrupt_enable(TIMER2, TIMER_INT_UP);
  • nvic_irq_enable(TIMER2_IRQn, 2U, 0U);
  • timer_auto_reload_shadow_enable(TIMER2);
  • timer_enable(TIMER2);

 

    同时在gd32e50x_it.c文件中添加了中断处理函数,同时在头文件中进行了声明。中断处理是对LED1进行翻转测试,方便观看定时效果:

  • /*!
  • \brief TIMER2中断处理函数
  • \param[in] none
  • \param[out] none
  • \retval none
  • */
  • void TIMER2_IRQHandler(void)
  • {
  • gd_eval_led_toggle(LED1);
  • }

 

    在主程序开始时调用了中断设置函数:

  • void exti_config(void)
  • {
  • /* enable and set EXTI interrupt */
  • nvic_irq_enable(TIMER2_IRQn, 1U, 0U);
  • /* configure EXTI line */
  • exti_init(TIMER2, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
  • exti_interrupt_flag_clear(TIMER2);
  • }

    但在测试过程中,LED1毫无反映,就如同中断未发生一般,不知道上面的代码有那里不正确或者是还缺少什么设置。

点赞 关注
 
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 

经仔细检查,发现的程序是停在中断使能这行代码上:

timer_interrupt_enable(TIMER2, TIMER_INT_UP);

此时LED灯被点亮,但没有继续翻转,应该是中断起了作用。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名最后一周!2025 英飞凌消费、计算与通讯创新大会-北京站
会议时间:3月18日(周二)09:30签到
参会奖励:电动螺丝刀套装、户外登山包、京东卡

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表