定时器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
软件配置不对
麻烦,指出哪里不对,感谢 你好,是有该问题。详细描述和解法可以看官网上的勘误手册。链接如下:
https://www.arterytek.com/download/Errata/ES0002_AT32F403A_407_Errata_Sheet_ZH_V2.0.5.pdf
muyichuan2012 发表于 2022-6-10 19:00
你好,是有该问题。详细描述和解法可以看官网上的勘误手册。链接如下:
https://www.arterytek.com/downlo ...
你好,你的意思是tmr1和trm2不可以开溢出中断吗?只有trm3和trm4才可以开溢出中断吗?
页:
[1]