SYSCFG_EXTILineConfig函数的第二个参数不能用或运算吗

2019-07-20 20:29发布

本帖最后由 学习stm32f4 于 2016-8-30 17:50 编辑

大家好,在学习外部中断时,按照原子哥的视频与程序教程,自己仿照着写,用PE4和PE3控制蜂鸣器,按下PE4后,蜂鸣器反转;按下PE3后,蜂鸣器也反转。
刚开始,对SYSCFG_EXTILineConfig函数,是这样写的:
[mw_shl_code=c,true]        
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4|EXTI_PinSource3);
[/mw_shl_code]
编译并下载程序后,无论按PE4对应的键还是PE3对应的键,蜂鸣器均不响。
接着就排故,一点一点的试,直到发现将上面的语句写成:
[mw_shl_code=c,true]
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource3);
[/mw_shl_code]
这时下载程序后,蜂鸣器正常。
若将上面的两条语句合成一条,即用或运算符作用于第二个参数,那么蜂鸣器不会响。

请问SYSCFG_EXTILineConfig确实不能用或运算符吗?为何不能像GPIO_SetBits(GPIOE,GPIO_Pin_4|GPIO_Pin_3);等函数那样使用或运算符呢?

注:原子哥的例程是将第二个参数分开写的。
又注:
初始化NVIC_Init()时,也不能对成员NVIC_IRQChannel使用或运算符:
[mw_shl_code=c,true]        
NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn|EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
[/mw_shl_code]
上面的代码只能写成分开的形式:
[mw_shl_code=c,true]        
NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
[/mw_shl_code]

未知上述原因,目前只能比葫芦画瓢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。