打印
[应用相关]

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

[复制链接]
1571|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 简单的辉辉 于 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这个引脚,确定是有产生边沿变化在这个引脚上,排除电路是否有问题。

使用特权

评论回复
5
简单的辉辉|  楼主 | 2022-9-14 14:46 | 只看该作者
本帖最后由 简单的辉辉 于 2022-9-14 14:47 编辑
vt2017 发表于 2022-9-14 14:02
我这边用你的代码在板子上跑是可以进入CH1中断的,标志也能置起来,你示波器看看PC12这个引脚,确定是有产 ...

谢谢,你用我上面的代码。那说明代码没问题。
同样的板子,我用外部中断在上升下降沿都是可以触发中断的,电路上应该是对的。我再查查电路先。
是不是我初始化配置哪里漏掉了啥,或者配置错了啥。
我自己检查了几遍,没有发现破绽。郁闷ing

使用特权

评论回复
6
简单的辉辉|  楼主 | 2022-9-15 08:31 | 只看该作者
我在AT-START-F437 V1.0板上测了下之前的代码,还是跑不起来。
V2.0.8的库

使用特权

评论回复
7
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)
{}
}
}

使用特权

评论回复
8
简单的辉辉|  楼主 | 2022-9-16 07:54 | 只看该作者
谢谢,等解封后换一块板再试一试了。

使用特权

评论回复
9
简单的辉辉|  楼主 | 2022-9-20 15:38 | 只看该作者
换了块板,是OK的。应该是板上有啥问题。

使用特权

评论回复
10
Jacquetry| | 2022-10-4 21:21 | 只看该作者
楼主找到问题了吗?

使用特权

评论回复
11
简单的辉辉|  楼主 | 2022-10-6 21:45 | 只看该作者
Jacquetry 发表于 2022-10-4 21:21
楼主找到问题了吗?

换了块板,就好了。也没有具体去找硬件上究竟哪里没对。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

20

帖子

1

粉丝