我按照教程写中断,但是不知道为什么,主程序总卡在初始化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的问题。
【相关推荐】