欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

外部中断---STM32F1

发布时间:2023/12/1 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 外部中断---STM32F1 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

外部中断概述

STM32的中断控制器支持19个外部中断/事件请求:

  • 线0-15:对应外部IO口的输入中断
  • 线16:连接到PVD输出
  • 线17:连接到RTC闹钟事件
  • 线18:连接到USB唤醒事件

STM32每个IO口都有可以作为外部中断输入,IO口有很多,STM32供IO使用的中断线只有16个,那么中断线怎么跟IO口对应呢?
这个时候就要用到端口重映射了

GPIOx.0映射到EXTI0(外部中断线0)
GPIOx.1映射到EXTI1(外部中断线1)

GPIOx.15映射到EXTI15(外部中断线15)
怎么使用函数把GPIO口映射到外部中断线呢?
GPIO_EXTILineConfig可以配置,比如说把PE2映射到EXTI2(中断线2)

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);//PE2映射到中断线2

对于每个中断线,我们可以设置相应的触发方式以及使能,触发方式有三种:

  • 上升沿触发
  • 下降沿触发
  • 边沿触发
  • 一共16个外部中断线,STM32是否分配16个中断处理函数呢?
    答案是否定的,外部中断在中断向量表中只分配了7个中断向量,也就是说16个外部中断只分配了7个外部中断服务函数

    外部中断线5-9分配一个中断向量,外部中断线15-10分配一个中断向量
    中断服务函数如下:

    EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler

    外部中断常用库函数

    void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);//设置IO口与中断线的映射关系exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); //初始化中断线:触发方式等ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); //判断中断线中断状态,是否发生void EXTI_ClearITPendingBit(uint32_t EXTI_Line); //清除中断线上的中断标志位

    外部中断库函数设置

    1.使能外设以及初始化IO口为输入

    GPIO_Init()
  • 开启IO口复用时钟
  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)
  • 设置IO口与中断线的映射关系
  • void GPIO_EXTILineConfig();
  • 初始化线上中断,设置触发条件等
  • EXTI_Init();
  • 配置中断分组(NVIC),并使能中断
  • NVIC_Init();
  • 编写中断服务函数
  • EXYIx_IRQHandler();
  • 清除中断标志位
  • EXTI_ClearITPendingBit();

    总结

    以上是生活随笔为你收集整理的外部中断---STM32F1的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。