STM32--GPIO和外部中断

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













  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值