STM32中断发生问题

我用指针初始化中断它运行总卡在中断初始化这里,改了一下用取址初始化成功了,应该没有问题,这两个我感觉是相同的定义,但是却出现问题了,这是为什么呀?

错误代码


    EXTI_InitTypeDef * Exti_Init;
    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);

修改后代码


    EXTI_InitTypeDef Exti_Init; 
    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_Init(&Exti_Init);

错误代码的第一行只创建了指针变量,指针指向null而不是结构体,所以赋值不能实现,而且传给初始化函数的地址也是null,初始化也不能实现

要修改的话,可以多声明一个结构体变量,
在第一行下面第二行上面,给指针赋值为结构体变量的地址

【以下回答由 GPT 生成】

根据你提供的代码,我可以看出问题是因为在使用指针初始化 Exti_Init 结构体时,没有为 Exti_Init 分配内存空间,导致程序在中断初始化的地方卡住。

在错误代码中,你定义了一个指向 EXTI_InitTypeDef 结构体的指针 Exti_Init,但是没有为它分配内存空间。因此,当你尝试访问 Exti_Init 的成员变量时,会出现错误,导致程序卡住。

为了解决这个问题,你将 Exti_Init 的定义从指针修改为结构体本身,并传递结构体的地址给 EXTI_Init() 函数。

修改后的代码中,你定义了 EXTI_InitTypeDef 结构体变量 Exti_Init,然后通过 &Exti_Init 传递结构体的地址给 EXTI_Init() 函数,这样函数就能正确地访问 Exti_Init 的成员变量并进行初始化。

下面是修改后的代码:

EXTI_InitTypeDef Exti_Init;
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_Init(&Exti_Init);

这样修改后的代码可以正常运行,因为结构体变量 Exti_Init 在栈上分配了内存空间,函数能够正确地访问结构体的成员变量。



【相关推荐】



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