本人第一次使用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没有接任何外设!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>