打印

GD32E230C8T6定时器2问题

[复制链接]
2433|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
16675238841|  楼主 | 2019-5-30 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用定时器2定时一个1s的中断,但是定时器2的中断在间隔很短的时间就进中断了,想问广大网友,是否配置错误,还是其他问题
void Time2_init()
{
    timer_parameter_struct timer_initpara;
    rcu_periph_clock_enable(RCU_TIMER2);
    timer_deinit(TIMER2);

    /* TIMER0 configuration */
    timer_initpara.prescaler         = 7199;//72M7200分频10khz
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;//向上计数
    timer_initpara.period            = 9999;//1s定时
    timer_initpara.clockdivision     = 0;//不分频
    timer_initpara.repetitioncounter = 0;//计数重复值0
    timer_init(TIMER2,&timer_initpara);
          timer_interrupt_enable(TIMER2,TIMER_INT_UP  );
          nvic_irq_enable(TIMER2_IRQn,0U);//使能更新中断
    timer_auto_reload_shadow_enable(TIMER2);
    timer_enable(TIMER2);
}
void TIMER2_IRQHandler(void)
{
          
    if(RESET != timer_interrupt_flag_get (TIMER2,TIMER_INT_FLAG_UP  ))
                {
                        time++;
         if(time==1)
         {
                 gpio_bit_reset(GPIOA,GPIO_PIN_11);//RST_H
         }
         else if(time==2)
         {
                gpio_bit_set(GPIOA,GPIO_PIN_11);//RST_H
                 time=0;
         }
    }
    timer_interrupt_flag_get(TIMER2,TIMER_INT_FLAG_UP);
}

使用特权

评论回复
沙发
16675238841|  楼主 | 2019-5-30 11:44 | 只看该作者
没有一个大神看下

使用特权

评论回复
评论
zeshoufx 2019-6-1 20:50 回复TA
中断函数最后一句好像不对吧,,应该是清除中断标志吧,,不是获取 
板凳
16675238841|  楼主 | 2019-5-30 14:32 | 只看该作者
央央华夏,无一人试过,帖子就这样深沉海底,各位好汉,路过走过不要就这样看过,起码留下一点东西,再不济留下车牌也行。

使用特权

评论回复
评论
GD32chip 2019-6-1 00:13 回复TA
车牌 粤B18340 
地板
梦麟yy| | 2019-5-31 17:37 | 只看该作者
定时器的配置看起来没什么问题,想问下你主频设置的是多少,APB总线速度是多少?

使用特权

评论回复
5
ZQZ760800| | 2019-5-31 18:39 | 只看该作者
中断内没有清除中断标志,中断内最后一个函数copy错了

使用特权

评论回复
6
梦麟yy| | 2019-5-31 20:09 | 只看该作者
楼上正解

使用特权

评论回复
7
lvben5d| | 2019-6-1 15:15 | 只看该作者
本帖最后由 lvben5d 于 2019-6-1 15:20 编辑

既然你的time是管理翻转点灯的, 不如直接在中断处理程序里  static time=0.(可读性好 不过放全局也没啥事)   定时器初始化参考我的,避免enable就中断,     
/* TIMER3 configuration */        我的是GD32E103  M4内核
    timer_initpara.prescaler           = 48;              //APB1_CLK=48M/48 = 1us
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period               = 3;               
    timer_initpara.clockdivision       = TIMER_CKDIV_DIV1;  //这个分频只对PWM输出有用。
    timer_initpara.repetitioncounter = 0;  
    timer_init(TIMER3, &timer_initpara);
    timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_UP);  //注意使能前,轻下标志。
    timer_interrupt_enable(TIMER3, TIMER_INT_UP);
    //使能后  经过你要的时间,才会进中断。  楼主按照网上流传这些初始化写,也是一个方式。 我喜欢全部初始化放一起。有机会交流
   PS: 楼上的上面 已经提交答案了, 学习这些有库的芯片,一定要看 EXZAMPLE的例子 避免初学时候的懵懂和笔误。

使用特权

评论回复
8
16675238841|  楼主 | 2019-6-2 11:40 | 只看该作者
ZQZ760800 发表于 2019-5-31 18:39
中断内没有清除中断标志,中断内最后一个函数copy错了

对,是我弄错了,之前也弄好了,货到论坛向大哥谢好。

使用特权

评论回复
9
qcliu| | 2019-6-12 14:43 | 只看该作者
感谢楼主分享经验

使用特权

评论回复
10
tfqi| | 2019-6-12 14:49 | 只看该作者
很好 长知识了

使用特权

评论回复
11
zljiu| | 2019-6-12 15:10 | 只看该作者
可以 不过出现这种问题的原因可以有很多

使用特权

评论回复
12
drer| | 2019-6-19 11:18 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝