james-418028 发表于 2013-3-15 16:03:04

STM32 EXTI外部中断进不了中断程序,指高手指点

#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
 
void LED_Init(void)
{
 /* GPIOD Periph clock enable */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
 /* Configure PD6 and PD13 in output pushpull mode */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_13;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOD, &GPIO_InitStructure);
 /*GPIOC Periph clock enable*/
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;  //choose gpio pin
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;   //set gpio speed
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //set gpio mode
 GPIO_Init(GPIOC, &GPIO_InitStructure);      //initial gpio port
}
 
void GPIO_EXTIConfigration(void)
{
 //GPIOE Periph clock enable
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
 //set pe2 pe3 pe4 pe5 input mode
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOE, &GPIO_InitStructure);      //initial gpio port
/*       ENABLE AFIO CLOCK    */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
/*   connect gpio to exti   */   
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);
//   config EXTI initial
    EXTI_InitStructure.EXTI_Line = EXTI_Line2|EXTI_Line3|EXTI_Line4|EXTI_Line5;
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
 EXTI_Init(&EXTI_InitStructure);
   
}
 
void NVIC_Configration(void)
{
    NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);    //system default NVIC VECTTAB TO FLASH, so needn't
 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn|EXTI3_IRQn|EXTI4_IRQn|EXTI9_5_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f ;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
 NVIC_Init(&NVIC_InitStructure);
}
void main()
{
LED_Init(); 
GPIO_EXTIConfigration();
  NVIC_Configration();
while(1)
{
;
}
}
中断子程序:
/*
 *
 *
 *
 *
 */
 void EXTI2_IRQHandler(void)
   {
    if( (EXTI_GetITStatus(EXTI_Line2))!=0 )
     {
        GPIOD->BSRR = 0x00000040;
  EXTI_ClearITPendingBit(EXTI_Line2);
  
     }
 }
/*
 *
 *
 *
 *
 */
 void EXTI3_IRQHandler(void)
 {
    if( (EXTI_GetITStatus(EXTI_Line3))!=0 )
     {
     GPIOD->BSRR = 0x00002000;
  EXTI_ClearITPendingBit(EXTI_Line3);
  
     }
 }
/*
 *
 *
 *
 *
 */
 void EXTI4_IRQHandler(void)
 {
    if( (EXTI_GetITStatus(EXTI_Line4))!=0 )
     {
     GPIOC->BSRR = 0x00000080;
  EXTI_ClearITPendingBit(EXTI_Line4);
     }
 
 }
/*
 *
 *
 *
 *
 */
 void EXTI9_5_IRQHandler(void)
 {
    if( (EXTI_GetITStatus(EXTI_Line5))!=0 )
     {
     GPIOC->BSRR = 0x00000040;
  EXTI_ClearITPendingBit(EXTI_Line5);
     }
 
 }
 
 利用开发板仿真的时候可以看到对应的peng = 1,却进不了中断程序,请前辈帮忙指点     
 

james-418028 发表于 2013-3-17 11:26:37

RE:STM32 EXTI外部中断进不了中断程序,指高手指点

怎么没有朋友帮忙看下啊自己顶起吧
还是先看看STM32权威指南

james-418028 发表于 2013-3-17 11:29:26

RE:STM32 EXTI外部中断进不了中断程序,指高手指点

好像没什么人气看大部分求助的贴子都没有人回复啊!:'(

james-418028 发表于 2013-3-25 17:35:59

RE:STM32 EXTI外部中断进不了中断程序,指高手指点

问题已经解决,给新手门分享一下:
几个EXTI中断同时初始化的时候出错,
只要分开初始化就可以啦!
页: [1]
查看完整版本: STM32 EXTI外部中断进不了中断程序,指高手指点