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