|
求前辈们帮忙看看我的中断设置函数,为什么就是进不去外部中断呢, EXTI_SWINT_Enable(EXTI_LINE1)设置为产生软件中断可以进去一次,之后用板子上的下降沿触发就进不去了,我用的是GD32的板子。
//时钟设置
void RCC_config(void)
{
RCC_DeInit();
/*未焊接外部晶振,不使能*/
RCC_HSEConfig(RCC_HSE_OFF);
/*选用内部8M高速晶振作为时钟源*///设备上电后,CPU默认选择的时钟源就是HSI时钟
RCC_HSI_Enable(ENABLE);
/*锁相环选取内部8M高速时钟分频,为2分频,再倍频18倍后输出为72M*/
// RCC_PLLConfig(RCC_PLLSOURCE_HSI_DIV2, RCC_PLLMUL_18);
/*锁相环选取内部8M高速时钟分频,为2分频,再倍频12倍后输出为48M*/
RCC_PLLConfig(RCC_PLLSOURCE_HSI_DIV2, RCC_PLLMUL_12);
RCC_PLL_Enable(ENABLE);
while (RCC_GetBitState(RCC_FLAG_PLLSTB) == RESET)
{
}
/*系统时钟选用PLL输出时钟48M*/
RCC_CK_SYSConfig(RCC_SYSCLKSOURCE_PLLCLK);
while (RCC_GetCK_SYSSource() != 0x08)
{
}
/*AHB高性能总线选择系统时钟不分频 48M*/
RCC_AHBConfig(RCC_SYSCLK_DIV1);
/*APB1 外围总线1选择系统时钟不分频 48M*/
RCC_APB1Config(RCC_APB1AHB_DIV1);
/*APB2 外围总线2选择系统时钟不分频 48M*/
RCC_APB2Config(RCC_APB2AHB_DIV1);
}
void GPIO_config(void)
{
RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);//电机的驱动端口
GPIO_InitPara GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =GPIO_PIN_1;//PB1
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLUP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void EXTI_config(void)//将IO口配置成外部中断口
{
EXTI_InitPara EXTI_InitStructure;
EXTI_ClearIntBitState(EXTI_LINE1);//清空中断标志
EXTI_ClearBitState(EXTI_LINE1);
EXTI_DeInit(&EXTI_InitStructure);
SYSCFG_EXTILine_Config(EXTI_SOURCE_GPIOB,EXTI_SOURCE_PIN1);//将PB1脚作为外部中断口
EXTI_InitStructure.EXTI_LINE=EXTI_LINE1;//选择中断线路
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设置中断请求,非事件请求
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//设置中断出发方式为下降沿触发
EXTI_InitStructure.EXTI_LINEEnable=ENABLE;//外部中断使能
EXTI_Init(&EXTI_InitStructure);
EXTI_SWINT_Enable(EXTI_LINE1);//产生一个软件中断
}
void NVIC_config()//中断配置
{
NVIC_InitPara NVIC_InitStructure;
NVIC_VectTableSet(0x08000000,0x0000);
NVIC_PRIGroup_Enable(NVIC_PRIGROUP_1);
NVIC_InitStructure.NVIC_IRQ = EXTI0_1_IRQn;//
NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
NVIC_InitStructure.NVIC_IRQPreemptPriority = 1;//数越小优先级越高,读温度的优先级一定要是最高
NVIC_InitStructure.NVIC_IRQSubPriority = 0;
NVIC_Init(&NVIC_InitStructure);
}
void System_config(void)
{
RCC_config();//时钟初始化配置函数
GPIO_config();//IO口配置`
EXTI_config();//把I/O口设置成中断电路
NVIC_config();//中断配置
}
int i;
void EXTI0_1_IRQHandler(void)
{
Delay_ms(10);
if(EXTI_GetIntBitState(EXTI_LINE1)!=RESET)
{
i=5;
}
EXTI_ClearBitState(EXTI_LINE1);
EXTI_ClearIntBitState(EXTI_LINE1);
}
void main(void)
{
Delay_ms(400);
System_config();//外设配置
while(1);
}
|
|