打印
[STM32F1]

STM32外部中断进不去

[复制链接]
2199|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1456276911|  楼主 | 2015-1-23 14:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32外部中断,配置完全看不出有什么问题,可是中断就是触发不了,用EXTI_GenerateSWInterrupt(EXTI_Line0);软件触发也不行,求大家帮看看,以下是配置程序:
//时钟配置
void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;  
  RCC_DeInit();
  RCC_HSEConfig(RCC_HSE_ON);
  HSEStartUpStatus = RCC_WaitForHSEStartUp();
  if(HSEStartUpStatus == SUCCESS)
  {
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    FLASH_SetLatency(FLASH_Latency_2);
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div2);
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
    RCC_PLLCmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_I2C1 | RCC_APB1Periph_CAN1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);
}
//IO口配置
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void EXTI_Config(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
         
        EXTI_InitStructure.EXTI_Line = EXTI_Line0;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
       
}

int main()
{   
        RCC_Configuration();                     
        GPIO_Configuration();                                                        
        EXTI_Config();       
        EXTI_GenerateSWInterrupt(EXTI_Line0);
        while(1)
        {                                       
                LEDRED_onoff(ON);
                Delay_ms(500);
                LEDRED_onoff(OFF);
                Delay_ms(500);
        }
}

void EXTI0_IRQHandler(void)
{
         if(EXTI_GetITStatus(EXTI_Line9)!= RESET)
        {
                  EXTI_ClearITPendingBit(EXTI_Line4);
                  LEDGREEN_onoff(ON);
        }
}


沙发
紫宸| | 2015-1-23 16:11 | 只看该作者
NVIC没有配置
类似如下:

/* 使能中断线并配置中断优先级 */
        NVIC_InitStructure.NVIC_IRQChannel = NRF24L01_IRQ_EXTI_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

使用特权

评论回复
板凳
jar1866| | 2015-1-23 16:52 | 只看该作者
参考楼上, 或者在固件库中找到EXTI的example

使用特权

评论回复
地板
mmuuss586| | 2015-1-23 18:15 | 只看该作者
配置下中断优先级;

另外中断程序也不对,有0,9,4呢;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

68

帖子

0

粉丝