你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
james-418028 提问时间:2013-3-15 16:03 /
#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,却进不了中断程序,请前辈帮忙指点     
 
收藏 评论3 发布时间:2013-3-15 16:03

举报

3个回答
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中断同时初始化的时候出错,
只要分开初始化就可以啦!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版