研究生
最后登录1970-1-1
在线时间 小时
注册时间2016-7-21
|
平衡车今天遇到一个问题,编写按键驱动程序时候KEY1、KEY2只能使用其中一个按键,而且经查每个按键的配置单独使用都正常。三个按键分别为KEY1----PA12、KEY2----PC12、KEY3----PB5,那么有KEY1/KEY2两个按键在同一条中断线EXTI_Line12上。
配置时候后面一个总会覆盖前面的配置。例如:
//KEY1----PA12
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);
EXTI_InitStructure.EXTI_Line = EXTI_Line12;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//KEY2----PC12
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC , GPIO_PinSource12);
EXTI_InitStructure.EXTI_Line = EXTI_Line12;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
那么上述的配置完毕后就只能进入key2的中断服务函数,key1按键将不能使用。
经查, GPIO_Port_Sources它并不像其它寄存器一样,每一个bit代表一个数据,而是如下:
/** @defgroup GPIO_Port_Sources
* @{
*/
#define GPIO_PortSourceGPIOA ((uint8_t)0x00)
#define GPIO_PortSourceGPIOB ((uint8_t)0x01)
#define GPIO_PortSourceGPIOC ((uint8_t)0x02)
#define GPIO_PortSourceGPIOD ((uint8_t)0x03)
#define GPIO_PortSourceGPIOE ((uint8_t)0x04)
#define GPIO_PortSourceGPIOF ((uint8_t)0x05)
#define GPIO_PortSourceGPIOG ((uint8_t)0x06)
也就是说GPIO_PortSourceGPIOB | GPIO_PortSourceGPIOC 它并不是开启两者信号源,而是变成了GPIO_PortSourceGPIOD
因此,这里可以看出同一条中断线的不同中断源不能同时使用。不知道这个结论是否正确?
|
|