问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32A503 定时器7两路输入捕获不能同时工作

timer 定时器 输入捕获 GD32 TI 2A

GD32A503 定时器7两路输入捕获不能同时工作

zjsxhwl2025-10-22
void timer7_config_icp(void)
{
    timer_ic_parameter_struct timer_icinitpara;
    timer_parameter_struct timer_initpara;
    rcu_periph_clock_enable(RCU_TIMER7);
    timer_deinit(TIMER7);

    timer_initpara.prescaler         = 1999;//100M/2000=0.05MHZ
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 65536-1;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 4;
    timer_init(TIMER7, &timer_initpara);

          timer_input_trigger_source_select(TIMER7, TIMER_SMCFG_TRGSEL_CI0FE0|TIMER7, TIMER_SMCFG_TRGSEL_CI1FE1);    // 输入触发源为通道0
    timer_slave_mode_select(TIMER7, TIMER_SLAVE_MODE_RESTART);               // 从模式选择为复位模式
    timer_master_slave_mode_config(TIMER7, TIMER_MASTER_SLAVE_MODE_ENABLE);  // 使能从模式

       
          timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING; // 配置了 CH0P   [CH0NP==0, CH0P==0]:把 CIxFE0 的上升沿作为捕获或者从模式下触发的有效信号,并且 CIxFE0 不会被翻转。
          timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
          timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
          timer_icinitpara.icfilter = 4;
          timer_input_pwm_capture_config(TIMER7, TIMER_CH_0|TIMER_CH_1, &timer_icinitpara);

    timer_auto_reload_shadow_enable(TIMER7);
                timer_interrupt_flag_clear(TIMER7, TIMER_INT_CH0|TIMER_INT_CH1);  // 清除通道0中断标志位
    timer_interrupt_enable(TIMER7, TIMER_INT_CH0|TIMER_INT_CH1);      // 使能通道0中断
  
               
                nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);   // 抢占优先级4位,响应优先级0位
    nvic_irq_enable(TIMER7_Channel_IRQn, 0, 0);         // 使能中断服务,抢占优先级为1
          timer_enable(TIMER7);       
}
回答 +关注 0
197人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册