GD32A503 定时器 7 两路输入捕获不能同时工作的解决方法

[复制链接]
38|2
4c1l 发表于 2025-12-31 22:53 | 显示全部楼层 |阅读模式
确认定时器 7 输入捕获通道模式配置正确
TIMER7 的 CH1/CH2 需分别配置为「输入捕获模式」,避免通道功能冲突(如误将其中一路设为输出比较),核心配置步骤:
c


// 1. 使能TIMER7时钟与对应GPIO时钟(以CH1=PA0、CH2=PA1为例)
rcu_periph_clock_enable(RCU_TIMER7);
rcu_periph_clock_enable(RCU_GPIOA);

// 2. 配置GPIO为复用功能(输入捕获需设为浮空输入/上拉输入)
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0 | GPIO_PIN_1);
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_0); // TIMER7_CH1对应AF1
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_1); // TIMER7_CH2对应AF1

// 3. 配置TIMER7基本参数(计数模式、分频系数等)
timer_parameter_struct timer_initpara;
timer_struct_para_init(&timer_initpara);
timer_initpara.prescaler = 107; // 时钟分频(假设系统时钟108MHz,分频后1MHz)
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 65535; // 自动重装值(最大16位)
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_init(TIMER7, &timer_initpara);

// 4. 配置CH1/CH2为输入捕获模式(关键:避免模式冲突)
timer_ic_parameter_struct timer_icinitpara;
timer_ic_struct_para_init(&timer_icinitpara);
// CH1配置:上升沿捕获、直连通道
timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING;
timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1; // 不分频
timer_icinitpara.icfilter = 0x00; // 滤波系数(按需调整)
timer_input_capture_config(TIMER7, TIMER_CH_1, &timer_icinitpara);

// CH2配置:与CH1一致(或按需设为下降沿,不冲突即可)
timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING;
timer_input_capture_config(TIMER7, TIMER_CH_2, &timer_icinitpara);

// 5. 使能输入捕获通道与定时器
timer_input_capture_enable(TIMER7, TIMER_CH_1 | TIMER_CH_2);
timer_enable(TIMER7);



关键注意:

  • 确保两路通道的「icselection」均设为「TIMER_IC_SELECTION_DIRECTTI」(直连通道),避免共用同一个触发源;
  • 滤波系数(icfilter)可按需调整(0~0x0F),但两路需独立配置,无需一致。


星辰大海不退缩 发表于 2026-1-28 20:10 | 显示全部楼层
确保两路通道的「icselection」均设为「TIMER_IC_SELECTION_DIRECTTI」(直连通道),避免共用同一个触发源;
szt1993 发表于 2026-1-28 22:47 | 显示全部楼层
TIMER7 的 CH1/CH2 需分别配置为「输入捕获模式」,避免通道功能冲突
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

707

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0