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

STM32F373无法响应部分外部中断

[复制链接]
yangwenchao2000 提问时间:2015-7-10 15:38 /
将PA8,PA15,PB5,PB6,PE8,PE9配置为外部中断,只有PA8,PA15,PE9管脚上产生的中断信号可以被响应,其他管脚上的中断信号响应不到。有使用FREE RTOS。

时钟配置:
void Clock_Init(void)
{
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SRAM,ENABLE);
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FLITF,ENABLE);
        
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |     \
                                      RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD |     \
                                       RCC_AHBPeriph_GPIOE , ENABLE);
        
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 | RCC_APB1Periph_SPI3, ENABLE);
        
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
         
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
}


中断管脚配置:
void Ext_Int_Port_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;

   /* Configure PA8, PA15 as input Pull-UP */
   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
   GPIO_Init(GPIOA,&GPIO_InitStructure);
        
   /* Configure PB5, PB6 as input Pull-UP */
   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5 | GPIO_Pin_6;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;        
   GPIO_Init(GPIOB,&GPIO_InitStructure);
        
    /* Configure PE8, PE9 as input Pull-UP */
   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
   GPIO_Init(GPIOE,&GPIO_InitStructure);
}


中断线连接配置,中断模式、触发方式、使能配置
void EXTI_Configuration(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;

    /*connect PA8,PA15 to EXTI*/         
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource8 | EXTI_PinSource15);
    /*connect PB5,PB6 to EXTI*/
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource5 | EXTI_PinSource6);
    /*connect PE8,PE9 to EXTI*/
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource8 | EXTI_PinSource9);
        
    /*Config */
    EXTI_InitStructure.EXTI_Line    = EXTI_Line5 | EXTI_Line6 | EXTI_Line8 | EXTI_Line9 | EXTI_Line15;
    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_Configuration(void)
{
    NVIC_InitTypeDef   NVIC_InitStructure;

    /* Set the Vector Table base location at 0x08000000 */  
   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x08000000);

    /* Configure the NVIC Preemption Priority Bits*/   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        
    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
        
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}



发现程序中配置PB5,PB6连接EXIT Line 5,line6,没有配置成功,因为在PA5、PA6上施加触发信号时程序能响应中断。说明SYSCFG_EXTICR2寄存器没有配置成功(依然为默认值000),所以在PA5、PA6上的中断信号能被响应。同样,如果仅配置PE8连接EXIT line8,而不配置PA8连接EXIT line8,只能响应到PA8上的中断,而不能响应PE8上的中断。
说明SYSCFG模块没正常工作。
但是如果SYSCFG模块没工作,PE9上的中断为什么能被响应?为什么PE9能配置成功,PE8、PB5、PB6就不能配置成功?


收藏 评论16 发布时间:2015-7-10 15:38

举报

16个回答
creep 回答时间:2015-7-10 15:49:31
PE8 和PA8连接的是同一个EXTI_Line吧。
yangwenchao2000 回答时间:2015-7-10 16:01:26
creep 发表于 2015-7-10 15:49
PE8 和PA8连接的是同一个EXTI_Line吧。

是的,没关系,可以分时复用。
回答时间:2015-7-10 16:59:12
我在想一个问题如下,如果是这样配置,
那么LINE=00000101|00000110|00001000|00001001|00001111
结果是LINE=00001111=0x0F
也就是配置的0x0F的中断,其他的中断没有配置?

EXTI_InitStructure.EXTI_Line    = EXTI_Line5 | EXTI_Line6 | EXTI_Line8 | EXTI_Line9 | EXTI_Line15;
yangwenchao2000 回答时间:2015-7-10 17:50:12
安 发表于 2015-7-10 16:59
我在想一个问题如下,如果是这样配置,
那么LINE=00000101|00000110|00001000|00001001|00001111
结果是LIN ...

不会的。
STM32F37x标准库的头文件stm32f37x_exti.h中是这样定义的:
#define EXTI_Line5       ((uint32_t)0x00000020)  /*!< External interrupt line 5  */
#define EXTI_Line6       ((uint32_t)0x00000040)  /*!< External interrupt line 6  */
#define EXTI_Line8       ((uint32_t)0x00000100)  /*!< External interrupt line 8  */
#define EXTI_Line9       ((uint32_t)0x00000200)  /*!< External interrupt line 9  */
#define EXTI_Line15      ((uint32_t)0x00008000)  /*!< External interrupt line 15 */

另外,即使真的是只配置0x0F的中断,那么PA5,PA6,PA8,PE9上的中断又怎么能响应?我感觉是SYSCFG模块这里有问题。原先PE9上的中断信号也是响应不到的,当开启SYSCFG模块的时钟时,PE9上的中断信号才能被响应到。但是其他管脚(PB5,PB6,PE8)上的中断还是不能响应。
dsjsjf 回答时间:2015-7-10 21:12:00
那几个口有没有被其他复用功用占用呢?
回答时间:2015-7-11 09:19:58
我看的是3xx的库。等我去下载一个373的看一下。
回答时间:2015-7-11 09:41:54
楼主可以把373的库上传一下吗?
yangwenchao2000 回答时间:2015-7-13 08:55:00
本帖最后由 yangwenchao2000 于 2015-7-13 08:59 编辑
安 发表于 2015-7-11 09:41
楼主可以把373的库上传一下吗?

附件是stm32f37x_dsp_stdperiph_lib中的LIBRARIES。整个库太大了,传不上来。

Libraries.rar

下载

8.07 MB, 下载次数: 14, 下载积分: ST金币 -1

yangwenchao2000 回答时间:2015-7-13 08:57:38
dsjsjf 发表于 2015-7-10 21:12
那几个口有没有被其他复用功用占用呢?

没有。
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版