STM32--GPIO和外部中断

来源:互联网 发布:java访问oracle数据库 编辑:程序博客网 时间:2024/04/30 14:22

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线路挂起位  }}













原创粉丝点击