确认定时器 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),但两路需独立配置,无需一致。
|