本帖最后由 简单的辉辉 于 2022-9-14 13:56 编辑
各位,由于项目中硬件设计时,AT32F437ZMT7将PC12作为红外遥控的接收。在程序中将PC12 复用为TRM11_CH1的输入捕获通道,但是输入捕获不成功。不管是上升沿,下降沿或者双边沿都无法置位中断标志位。输入捕获初始化函数如下:
void ir_init(void)
{
gpio_init_type gpio_init_struct;
tmr_input_config_type tmr_input_config_struct;
crm_periph_clock_enable(CRM_TMR11_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
gpio_init_struct.gpio_pins=GPIO_PINS_12;
gpio_init_struct.gpio_mode=GPIO_MODE_MUX;
gpio_init_struct.gpio_out_type=GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_pull=GPIO_PULL_UP;
gpio_init_struct.gpio_drive_strength=GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOC, &gpio_init_struct);
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE12, GPIO_MUX_3);
tmr_base_init(TMR11, 0xffff-1, 288-1);
tmr_cnt_dir_set(TMR11, TMR_COUNT_UP);
tmr_counter_enable(TMR11, TRUE);
tmr_input_config_struct.input_channel_select=TMR_SELECT_CHANNEL_1;
tmr_input_config_struct.input_mapped_select=TMR_CC_CHANNEL_MAPPED_DIRECT;
tmr_input_config_struct.input_polarity_select=TMR_INPUT_BOTH_EDGE;
tmr_input_channel_init(TMR11, &tmr_input_config_struct,TMR_CHANNEL_INPUT_DIV_1);
tmr_interrupt_enable(TMR11, TMR_C1_INT|TMR_OVF_INT, TRUE);
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
nvic_irq_enable(TMR1_TRG_HALL_TMR11_IRQn, 5, 0);
}
溢出中断是可以进中断处理函数:void TMR1_TRG_HALL_TMR11_IRQHandler(void)的。
目前用外部中断+定时器实现了遥控接收功能。
但是始终对这个管脚的输入捕获为啥不成功存疑虑。(库函数例程中的输入捕获没问题)
还望各位大佬看看问题出在哪里!
谢过先!!
|