打印
[AT32F407]

定时器4通道1和2,编码器模式使能溢出中断不起作用呢

[复制链接]
1137|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
l721368|  楼主 | 2022-6-10 18:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 l721368 于 2022-6-10 19:08 编辑

1、编码器模式,可以获取到正确的值
  tmr_base_init(TMR4, 0xFFFF, 0);
  tmr_cnt_dir_set(TMR4, TMR_COUNT_UP);
  /* config encoder mode */
  tmr_encoder_mode_config(TMR4, TMR_ENCODER_MODE_C, TMR_INPUT_RISING_EDGE, TMR_INPUT_RISING_EDGE);
  /* enable tmr2 */
  tmr_counter_enable(TMR4, TRUE);

2、想通过溢出中断后去判断方向,但是溢出中断没效果呢?
增加下面的代码
  /* overflow interrupt enable */
    tmr_interrupt_enable(TMR4, TMR_OVF_INT, TRUE);
    tmr_interrupt_enable(TMR4, TMR_C1_INT, TRUE);
    tmr_interrupt_enable(TMR4, TMR_C2_INT, TRUE);
    /* tmr1 overflow interrupt nvic init */
    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
    nvic_irq_enable(TMR4_GLOBAL_IRQn, 3, 0);
    tmr_flag_clear(TMR4, TMR_OVF_FLAG);
中断函数
void TMR4_GLOBAL_IRQHandler(void)
{
  if(tmr_flag_get(TMR4, TMR_OVF_FLAG) != RESET)
  {
    /* add user code... */
    at32_led_toggle(LED4);
    tmr_flag_clear(TMR4, TMR_OVF_FLAG);
  }

    /* Capture compare 1 event */
    if (tmr_flag_get(TMR4, TMR_C1_FLAG) != RESET)
    {
        tmr_flag_clear(TMR4, TMR_C1_INT);
    }
    /* Capture compare 2 event */
    if (tmr_flag_get(TMR4, TMR_C2_FLAG) != RESET)
    {
        tmr_flag_clear(TMR4, TMR_C2_INT);
    }
}
参考连接:STM32正交编码https://bbs.21ic.com/forum.php?mod=viewthread&tid=3217616&highlight=%E7%BC%96%E7%A0%81%E5%99%A8%E6%A8%A1%E5%BC%8F


使用特权

评论回复
沙发
huquanz711| | 2022-6-10 18:46 | 只看该作者
软件配置不对

使用特权

评论回复
板凳
l721368|  楼主 | 2022-6-10 18:48 | 只看该作者

麻烦,指出哪里不对,感谢

使用特权

评论回复
地板
muyichuan2012| | 2022-6-10 19:00 | 只看该作者
你好,是有该问题。详细描述和解法可以看官网上的勘误手册。链接如下:

https://www.arterytek.com/downlo ... Sheet_ZH_V2.0.5.pdf


使用特权

评论回复
5
木吉铁平| | 2022-9-5 10:19 | 只看该作者
muyichuan2012 发表于 2022-6-10 19:00
你好,是有该问题。详细描述和解法可以看官网上的勘误手册。链接如下:

https://www.arterytek.com/downlo ...

你好,你的意思是tmr1和trm2不可以开溢出中断吗?只有trm3和trm4才可以开溢出中断吗?

使用特权

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

本版积分规则

4

主题

9

帖子

0

粉丝