OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4328|回复: 2

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

[复制链接]

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2016-8-30 17:18:19 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 学习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]

未知上述原因,目前只能比葫芦画瓢。

最佳答案

查看完整内容[请看2#楼]

EXTI_PinSource4和EXTI_PinSource3或一下的值就变成其他的EXTI_PinSource了, GPIO_Pin_0 是0x0001,第一位是1,其他位是0 GPIO_Pin_1是0x0002,第二位是1,其他位是0 这种的能或运算
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-9-27
在线时间
23 小时
发表于 2016-8-30 17:18:20 | 显示全部楼层
EXTI_PinSource4和EXTI_PinSource3或一下的值就变成其他的EXTI_PinSource了,
GPIO_Pin_0 是0x0001,第一位是1,其他位是0
GPIO_Pin_1是0x0002,第二位是1,其他位是0
这种的能或运算
生死看淡,低头猛干
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2016-8-30 20:07:58 | 显示全部楼层
zzz 发表于 2016-8-30 17:18
EXTI_PinSource4和EXTI_PinSource3或一下的值就变成其他的EXTI_PinSource了,
GPIO_Pin_0 是0x0001,第一 ...

非常感谢,您的回复很清晰明确,很容易理解。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 07:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表