STM32中断发生问题

我按照教程写中断,但是不知道为什么,主程序总卡在初始化EXTI的时候,麻烦帮我看看是有什么我没有注意到的吗?

这是头文件和程序文件

#ifndef _BSP_EXTI_H
#define _BSP_EXTI_H



#include "hxy_config.h"


void EXTI_CONFIG(void);


void NVIC_CONFIG(void);



#endif



#include "bsp_exti.h"


void NVIC_CONFIG(void)
{
    NVIC_InitTypeDef  * Nvic_Init;
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                //确定NVIC优先级分组
    
    
    
    Nvic_Init->NVIC_IRQChannel = EXTI0_IRQn;
    Nvic_Init->NVIC_IRQChannelPreemptionPriority = 1;
    Nvic_Init->NVIC_IRQChannelSubPriority = 1;
    Nvic_Init->NVIC_IRQChannelCmd = ENABLE;      
    
    NVIC_Init( Nvic_Init);
    
}

void EXTI_CONFIG(void)
{
    GPIO_InitTypeDef  Key;
    
    EXTI_InitTypeDef * Exti_Init;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //开启AFIO功能复用
    
    RCC_APB2PeriphClockCmd(KEY_GPIO_CLK, ENABLE);
    
    
  
    
    
    
    Key.GPIO_Pin = KEY_GPIO_PIN;
    Key.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(KEY_GPIO_PORT, &Key);      //开启GPIO
    
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, 0);   //将GPIO和EXTI连接上
    
    Exti_Init->EXTI_Line = EXTI_Line0 ;
  Exti_Init->EXTI_LineCmd = ENABLE;
    Exti_Init->EXTI_Mode = EXTI_Mode_Interrupt;
    Exti_Init->EXTI_Trigger = EXTI_Trigger_Rising ;               //初始化EXTI
    
    EXTI_Init( Exti_Init);
    
    NVIC_CONFIG();
    
    
    
}



【以下回答由 GPT 生成】

问题可能出在Exti_Init的使用上。在EXTI_CONFIG函数中,需要对Exti_Init进行初始化,并将其作为参数传递给EXTI_Init函数。修改代码如下:

#include "bsp_exti.h"

void EXTI_CONFIG(void) 
{
    GPIO_InitTypeDef  Key;

    EXTI_InitTypeDef Exti_Init;  // 修改此处

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //开启AFIO功能复用

    RCC_APB2PeriphClockCmd(KEY_GPIO_CLK, ENABLE);

    Key.GPIO_Pin = KEY_GPIO_PIN;
    Key.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(KEY_GPIO_PORT, &Key);     //开启GPIO

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, 0);   //将GPIO和EXTI连接上

    Exti_Init.EXTI_Line = EXTI_Line0 ;  // 修改此处
    Exti_Init.EXTI_LineCmd = ENABLE;  // 修改此处
    Exti_Init.EXTI_Mode = EXTI_Mode_Interrupt;  // 修改此处
    Exti_Init.EXTI_Trigger = EXTI_Trigger_Rising;  //修改此处  //初始化EXTI

    EXTI_Init(&Exti_Init);  // 修改此处

    NVIC_CONFIG();
}

void NVIC_CONFIG(void) 
{
    NVIC_InitTypeDef  Nvic_Init;  // 修改此处

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                //确定NVIC优先级分组

    Nvic_Init.NVIC_IRQChannel = EXTI0_IRQn;  // 修改此处
    Nvic_Init.NVIC_IRQChannelPreemptionPriority = 1;  // 修改此处
    Nvic_Init.NVIC_IRQChannelSubPriority = 1;  // 修改此处
    Nvic_Init.NVIC_IRQChannelCmd = ENABLE;  // 修改此处

    NVIC_Init(&Nvic_Init);  // 修改此处
}

以上修改后的代码应该可以正确初始化EXTI和NVIC,并解决主程序卡在初始化EXTI的问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^