STM32F051外部中断设置问题请教

2019-08-14 18:18发布

本人第一次使用STM32F051,欲使用其外部中断,参考有关例程设置之后,发现其外部中断在无触发的情况下也一样会进入中断程序,而且是周期性的,无端端外部中断变成了定时器中断,希望有高人指教,源码如下:
#include "main.h"
void UserRCCInit(void);
void UserGPIOInit(void);
void UserEXTIInit(void);
void UserNVICInit(void);

int main(void)
{
  UserRCCInit();
  UserGPIOInit();
  UserNVICInit();
  UserEXTIInit();
  delay_init(48);
 while(1)GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_RESET);// PC1口接着一个LED
}

void EXTI4_15_IRQHandler(void)// 中断服务程序
{
   if(EXTI_GetITStatus(EXTI_Line13) != RESET)// 判断是否外部中断13
   {
    GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_SET) ;// 进入中断就点灯100ms
    delay_ms(100);
    EXTI_ClearITPendingBit(EXTI_Line13);// 清除中断标志
   }
}

void UserGPIOInit(void)
{
// 指示灯
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 设置PB13为外部中断引脚
GPIO_InitStructure.GPIO_Pin   =GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource13);
}

void UserNVICInit(void)
{
  NVIC_InitTypeDef NVIC_InitStruct;
  NVIC_InitStruct.NVIC_IRQChannel=EXTI4_15_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelPriority=0;
  NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStruct);
}

void UserEXTIInit(void)
{
  EXTI_DeInit();EXTI_InitTypeDef EXTI_InitStruct;
  EXTI_InitStruct.EXTI_Line=EXTI_Line13;
  EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
  EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发
  EXTI_InitStruct.EXTI_LineCmd=ENABLE;
  EXTI_Init(&EXTI_InitStruct);
}

void UserRCCInit(void)
{

 RCC_DeInit();
 RCC->CR |= RCC_CR_HSION;
 while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) ==RESET){};
 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);
 RCC_PLLCmd(ENABLE); 
 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

 FLASH_SetLatency(FLASH_Latency_1);
 FLASH_PrefetchBufferCmd(ENABLE); 

 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
 RCC_HCLKConfig(RCC_SYSCLK_Div1);
 RCC_PCLKConfig(RCC_HCLK_Div2);
 RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div2);

 while(RCC_GetSYSCLKSource() != 0x08);
 
 RCC_GetClocksFreq(&RCC_Clocks);

 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOB, ENABLE);
}

上述程序在板上的现象就是,LED不停而且周期性地闪烁,相应的外部中断PB13没有接任何外设!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。