简单的辉辉 发表于 2022-9-14 13:09

PC12 利用 TMR11_CH1输入捕获时不能进中断

本帖最后由 简单的辉辉 于 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)的。
目前用外部中断+定时器实现了遥控接收功能。
但是始终对这个管脚的输入捕获为啥不成功存疑虑。(库函数例程中的输入捕获没问题)
还望各位大佬看看问题出在哪里!
谢过先!!

muyichuan2012 发表于 2022-9-14 13:43

请问您使用的AT32什么型号?

简单的辉辉 发表于 2022-9-14 13:57

muyichuan2012 发表于 2022-9-14 13:43
请问您使用的AT32什么型号?

AT32F437ZMT7这款芯片。

vt2017 发表于 2022-9-14 14:02

我这边用你的代码在板子上跑是可以进入CH1中断的,标志也能置起来,你示波器看看PC12这个引脚,确定是有产生边沿变化在这个引脚上,排除电路是否有问题。

简单的辉辉 发表于 2022-9-14 14:46

本帖最后由 简单的辉辉 于 2022-9-14 14:47 编辑

vt2017 发表于 2022-9-14 14:02
我这边用你的代码在板子上跑是可以进入CH1中断的,标志也能置起来,你示波器看看PC12这个引脚,确定是有产 ...
谢谢,你用我上面的代码。那说明代码没问题。
同样的板子,我用外部中断在上升下降沿都是可以触发中断的,电路上应该是对的。我再查查电路先。
是不是我初始化配置哪里漏掉了啥,或者配置错了啥。
我自己检查了几遍,没有发现破绽。郁闷ing

简单的辉辉 发表于 2022-9-15 08:31

我在AT-START-F437 V1.0板上测了下之前的代码,还是跑不起来。
V2.0.8的库

muyichuan2012 发表于 2022-9-15 13:29

我刚才也用AT-START-F437 V1.0板子V2.0.8的库加你的代码测试了一下,没有问题啊,可以正常进入中断。
你main函数怎么写的,先屏蔽无关代码试试。我main函数写法如下:
int main (void)
{
system_clock_config();
at32_board_init();
ir_init();
while(1)
{}
}
}

简单的辉辉 发表于 2022-9-16 07:54

谢谢,等解封后换一块板再试一试了。

简单的辉辉 发表于 2022-9-20 15:38

换了块板,是OK的。应该是板上有啥问题。

Jacquetry 发表于 2022-10-4 21:21

楼主找到问题了吗?

简单的辉辉 发表于 2022-10-6 21:45

Jacquetry 发表于 2022-10-4 21:21
楼主找到问题了吗?

换了块板,就好了。也没有具体去找硬件上究竟哪里没对。
页: [1]
查看完整版本: PC12 利用 TMR11_CH1输入捕获时不能进中断