l721368 发表于 2022-6-10 18:43

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

本帖最后由 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

huquanz711 发表于 2022-6-10 18:46
软件配置不对

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

muyichuan2012 发表于 2022-6-10 19:00

你好,是有该问题。详细描述和解法可以看官网上的勘误手册。链接如下:

https://www.arterytek.com/download/Errata/ES0002_AT32F403A_407_Errata_Sheet_ZH_V2.0.5.pdf


木吉铁平 发表于 2022-9-5 10:19

muyichuan2012 发表于 2022-6-10 19:00
你好,是有该问题。详细描述和解法可以看官网上的勘误手册。链接如下:

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

你好,你的意思是tmr1和trm2不可以开溢出中断吗?只有trm3和trm4才可以开溢出中断吗?
页: [1]
查看完整版本: 定时器4通道1和2,编码器模式使能溢出中断不起作用呢