您的位置:首页 > 其它

STM32--GPIO和外部中断

2013-07-03 14:56 218 查看
STM32中使用GPIO作为外部中断,以如下图的方式连接到外部中断,因此在设计的时候,不能同时将中断连接在PA.1 PB.1 PC.1 PD.1 PE.1,因为同时只能选择一个中断。

外部中断初始化,一个重要的结构体EXIT_InitTypeDef;

typedef struct
{
uint32_t EXTI_Line;               //EXTIx,设定是哪个外部中断EXTI_0,EXTI_1,EXTI_2....EXTI_15

EXTIMode_TypeDef EXTI_Mode;       //设定是中断还是事件   Interrupt or Event

EXTITrigger_TypeDef EXTI_Trigger; //触发的方式,上升沿,下降沿,上升-下降过程转换
FunctionalState EXTI_LineCmd;     //使能或禁止 Enable or Disable
}EXTI_InitTypeDef;


在GPIO用作外部中断首先需要将EXTIx和具体的GPIO口对应起来,选择GPIO管脚用作外部中断线路

void GPIO_EXTILineConfig(u8 GPIO _PortSource, u8 GPIO_PinSource)

GPIO_PortSource: 选择用作外部中断线源的 GPIO端口

GPIO_PinSource :待设置的外部中断线路

然后对结构体EXIT_InitTypeDef进行初始化

EXTI_InitStructure.EXTI_Line = GPIO_KEY1_EXTI_LINE;      //使用的中断线为EXTI_x
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;      //外部中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能
EXTI_Init(&EXTI_InitStructure);//初始化
EXIT_Init(&EXTI_InitStructure )根据EXTI_InitStruct 中指定的参数初始化外设 EXTI寄存器 。

连续初始化外部EXTI时,只需要修改EXTI_InitStruct.EXTI_Line参数就行了,然后在调用EXIT_Init(&EXTI_InitStructure )函数进行初始化

GPIO_EXTILineConfig(GPIO_KEY2_EXTI_PORT_SOURCE, GPIO_KEY2_EXTI_PIN_SOURCE);//另外一个端口的GPIO管脚作为中断线
EXTI_InitStructure.EXTI_Line = GPIO_KEY2_EXTI_LINE;//修改EXTI_Line参数
EXTI_Init(&EXTI_InitStructure); //再次进行初始化


中断函数里面

void EXTIx_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Linex) != 0)//检查指定的EXTI线路触发请求发生与否
{
... ... // do something
/* Clear the EXTI Line 0 */
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI线路挂起位
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: