Stm32 hal库exti程序

EXTI 简介

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

中断/事件线

EXTI 有 20 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至 EXTI15,还有另外七根用于特定的外设事件,见表 17_1 。4 根特定外设中断/事件线由外设触发,具体用法参考《STM32F10X-中文参考手册》中对外设的具体说明。表 17‑1 EXTI 中断/事件线

564a974a27734e0cbadeb0484a37b8e2.jpg

EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO 作为 EXTI 的输入源。由表17_1 可知,EXTI0 可以通过 AFIO 的外部中断配置寄存器 1(AFIO_EXTICR1) 的 EXTI0[3:0] 位选择配置为 PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者 PI0,见图 17_2。其他 EXTI 线 (EXTI中断/事件线) 使用配置都是类似的。

bdd1651fe6214527aeebd78e9c3dc574.jpg

  //初始化函数

  __HAL_RCC_GPIOD_CLK_ENABLE();

  GPIO_InitStruct.Pin = GPIO_PIN_7;

  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 1, 5);

  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

 

  EXTI_InitStruct.Line = EXTI_LINE_7;

  EXTI_InitStruct.Mode = EXTI_MODE_INTERRUPT;

  EXTI_InitStruct.Trigger = EXTI_TRIGGER_FALLING; //下降沿中断

  EXTI_InitStruct.GPIOSel = EXTI_GPIOD;

  HAL_EXTI_SetConfigLine(&hexti, &EXTI_InitStruct);

 

//中断函数

void EXTI9_5_IRQHandler(void)

{  

EXTI_HandleTypeDef hext; 

hext.Line=EXTI_LINE_7;  

if(HAL_EXTI_GetPending(&hext, EXTI_TRIGGER_RISING_FALLING)!= RESET) /* 确保是否产生了EXTI Line中断 */ 

{ while(1) }     

 //清除中断标志位    

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);    

if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_7) != RESET) {  

  //清除中断标志位  

__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_7);     

}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{ switch (GPIO_Pin) 

{ case GPIO_PIN_7 :      

                // LED1_TOGGLE   

                      break;    

      // case KEY2_INT_GPIO_PIN :      

                // LED2_TOGGLE    

          // break;   

} }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式冰箱

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值