打印

GD32F30X设置NVIC10_15IQRn,中断不能产生?

[复制链接]
776|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-7-16 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
出现的问题:GD32F30x中断问题:进行初始化NVIV中断控制器时。固件库函数NVIC_irq_enable()输入的第一参数即中断源:EXTI10_15_IRQn问题。设置后不能进行中断。

背景:使用KEY2按键PC13按下中断,使得LED灯1打开。
KEY2初始化函数:
KEY1初始化函数:
void key_goio_configer()
{
         rcu_periph_clock_enable(RCU_GPIOC);/*使能外设时钟*/
         gpio_init(GPIOC,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_13);//GPIO_A_0初始化,且设置为浮空输入
}
LED1初始化函数:
void led_goio_configer()
{
         rcu_periph_clock_enable(RCU_GPIOC);/*使能外设时钟*/
         gpio_init(GPIOC,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_2);//GPIO_C_0初始化,且设置为推挽输出
}
NVIC设置函数
static void NVIC_Configer(void)  ////配置中断优先级NVIC嵌入式矢量型中断控制寄存器-进行中断的优先级设置
{
         nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);//设置优先级组
         nvic_irq_enable(EXTI10_15_IRQn,0,0);     //进行NVIC中断控制器使能
}

按键KEY1中断函数

void key_led_configer(void)   //配置按键KEY_1(PA0)为中断
{
                   key_goio_configer();//初始化KEY1PA0
                   rcu_periph_clock_enable(RCU_AF);                           //使能AF复用功能外设时钟
           NVIC_Configer();                                                                           //配置中断优先级NVIC嵌入式矢量型中断控制寄存器-进行中断的优先级设置
                   gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC,GPIO_PIN_SOURCE_13);                  //选择GPIO-A的源头作为中断源
          exti_init(EXTI_13,EXTI_INTERRUPT,EXTI_TRIG_FALLING);                                                                             //初始化中断函数,配置EXTI线为0(与设置中断的优先级位置对应),设置为下降沿触发中断
                    exti_event_enable(EXTI_13);                                                                                                                                                                                                                                                                                                                   //使能中段
}

中断服务函数

void EXTI0_IRQHandler(void)
{
         if(exti_flag_get(EXTI_13)!=RESET)
         {
                            led_goio_configer();
                            gpio_bit_set(GPIOC,GPIO_PIN_2);

         }
                   exti_interrupt_flag_clear(EXTI_13);


}

使用特权

评论回复
沙发
g0d5xs| | 2023-8-21 12:41 | 只看该作者
你仿真跟踪一下呗,看看你的中断进没进来

使用特权

评论回复
板凳
zhizia4f| | 2023-8-21 13:45 | 只看该作者
换个IO中断试试吧,可能PC13有点问题吧

使用特权

评论回复
地板
w2nme1ai7| | 2023-8-21 15:17 | 只看该作者
你的硬件焊接是否是正常的啊

使用特权

评论回复
5
tax2r6c| | 2023-8-21 16:20 | 只看该作者
我觉得你可能需要将PC13先复用成普通的IO才行哦

使用特权

评论回复
6
Addition| | 2023-8-21 18:14 | 只看该作者
你这中断服务函数判断的时候使用exti_flag_get,标志位清除的时候用exti_interrupt_flag_clear,这很明显不对

使用特权

评论回复
7
Addition| | 2023-8-21 18:15 | 只看该作者
而且你这中断服务函数也不对

使用特权

评论回复
8
lamanius| | 2023-8-21 18:25 | 只看该作者
中断一般都是可以的啊,是不是你IO硬件没焊接好啊

使用特权

评论回复
9
q1ngt12| | 2023-8-21 19:33 | 只看该作者
这个你直接读取IO多好,中断还比较麻烦

使用特权

评论回复
10
su1yirg| | 2023-8-22 07:06 | 只看该作者
你设置成上拉输入试试呢?

使用特权

评论回复
11
d1ng2x| | 2023-8-22 09:45 | 只看该作者
浮空输入可能会误触之类的,就不好检测了吧

使用特权

评论回复
12
l1uyn9b| | 2023-8-22 11:19 | 只看该作者
没玩过GD的芯片,但总感觉和ST的差不多,其实楼主可以参考ST的看看

使用特权

评论回复
13
lix1yr| | 2023-8-22 13:15 | 只看该作者
按键这个IO你打开一下复用时钟试试,让其复用成普通IO

使用特权

评论回复
14
liliang9554| | 2023-8-22 22:18 | 只看该作者
IO硬件没焊好

使用特权

评论回复
15
muzierli| | 2023-8-24 11:53 | 只看该作者
事件模式和中断模式是两条路线,你用配置很乱,要一致,分清事件和中断函数。如Addition|所说,自己好好查查吧。

使用特权

评论回复
16
wade911| | 2023-9-1 14:49 | 只看该作者
exti中断里判断标志位那个函数错了  用这个 exti_interrupt_flag_get

使用特权

评论回复
17
Bowclad| | 2023-9-5 23:40 | 只看该作者
是有虚焊吗

使用特权

评论回复
18
Undshing| | 2023-9-27 22:34 | 只看该作者
参考ST的吧,基本通用

使用特权

评论回复
19
AloneKaven| | 2023-9-29 22:34 | 只看该作者
仿真看一下嘛

使用特权

评论回复
20
笑熬浆糊糊糊| | 2023-9-30 17:50 | 只看该作者
gd32f303的usb和can的中断函数是同一个,那么怎样区分是usn中断还是can中断?还是说usb和can是不能同时使用的?

使用特权

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

本版积分规则

1413

主题

3779

帖子

5

粉丝