STM32 外部中断(EXTI)

打印 上一主题 下一主题

主题 807|帖子 807|积分 2421

STM32 外部中断(EXTI)

实验:设置一个引脚的降落沿作为外部中断。
参考:江协科技
相关缩写

RCC(Reset and Clock Control) 复位和时钟控制
GPIO(General Purpose Input/Output) 通用输入/输出
AFIO(Alternate Function Input Output) 复用功能输入输出
EXTI(External Interrupt/Event Controller 外部中断/事件控制器)
NVIC(Nested vectored interrupt controller) 嵌套向量中断控制器
整体框图






重要步骤

0 使能时钟

  1. 开启GPIO引脚和AFIO的时钟。AFIO用来把GPIO引脚作为EXTI线
复制代码
1 初始化 GPIO

  1. 设置为输入引脚
复制代码
2 选择 GPIO 引脚做 EXTI_Line

  1. 把GPIO引脚作为EXTI线
复制代码
3 初始化 EXTI 外设

  1. 配置这个EXTI线的使能、触发模式,触发后是中断还是事件
复制代码
4 初始化 NVIC 外设

  1. 配置这个中断源的使能、优先级
复制代码
代码

  1. void CountSensor_Init(void) {
  2.     /*0 开启时钟*/
  3.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  // 开启GPIOB的时钟
  4.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  // 开启AFIO的时钟,外部中断必须开启AFIO的时钟
  5.     /*1 GPIO初始化*/
  6.     GPIO_InitTypeDef GPIO_InitStructure;
  7.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  8.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  9.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10.     GPIO_Init(GPIOB, &GPIO_InitStructure);  // 将PB14引脚初始化为上拉输入
  11.     /*2 AFIO选择中断引脚*/
  12.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,
  13.                         GPIO_PinSource14);  // 将外部中断的14号线映射到GPIOB,即选择PB14为外部中断引脚
  14.     /*3 EXTI初始化*/
  15.     EXTI_InitTypeDef EXTI_InitStructure;                     // 定义结构体变量
  16.     EXTI_InitStructure.EXTI_Line = EXTI_Line14;              // 选择配置外部中断的14号线
  17.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;                // 指定外部中断线使能
  18.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;      // 指定外部中断线为中断模式
  19.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  // 指定外部中断线为下降沿触发
  20.     EXTI_Init(&EXTI_InitStructure);                          // 将结构体变量交给EXTI_Init,配置EXTI外设
  21.     /*NVIC中断分组*/
  22.     // 注意:整个工程只需要配置一次
  23.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  // 配置NVIC为分组2
  24.                                                      // 即抢占优先级范围:0~3,响应优先级范围:0~3
  25.                                                      // 此分组配置在整个工程中仅需调用一次
  26.                                                      // 若有多个中断,可以把此代码放在main函数内,while循环之前
  27.                                                      // 若调用多次配置分组的代码,则后执行的配置会覆盖先执行的配置
  28.     /*4 NVIC配置*/
  29.     NVIC_InitTypeDef NVIC_InitStructure;                       // 定义结构体变量
  30.     NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;       // 选择配置NVIC的EXTI15_10线
  31.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            // 指定NVIC线路使能
  32.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  // 指定NVIC线路的抢占优先级为1
  33.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;         // 指定NVIC线路的响应优先级为1
  34.     NVIC_Init(&NVIC_InitStructure);                            // 将结构体变量交给NVIC_Init,配置NVIC外设
  35. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表