高级会员

- 积分
- 865
- 金钱
- 865
- 注册时间
- 2016-8-25
- 在线时间
- 485 小时
|
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
这种的能或运算
|