芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
【星允派 NEBULA PI】05:调试外部中断
原创 发布时间:昨天 20:22
版块:
单片机/MCU论坛
简介:使用STM32的外部中断点亮板载的LED灯

一:中断知识的介绍:

扩展中断和事件控制器(EXTI)通过可配置和直接的事件输入管理单个CPU和系统唤醒。它向电源控制提供唤醒请求,并向CPUNVIC生成中断请求,向CPU事件输入生成事件。对于CPU,需要额外的事件生成块(EVG)来生成CPU事件信号。
EXTI唤醒请求允许从停止模式唤醒系统。

STM32的每个IO都可以作为外部中断输入。STM32的中断控制器支持19个外部中断/事件请求:

线0~15:对应外部IO口的输入中断。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

Stm 32的中断配置方式:每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

二:软件配置步骤:

初始化IO口为输入。

开启IO口复用时钟。

设置IO口与中断线的映射关系。

初始化线上中断,设置触发条件等。

配置中断分组(NVIC),并使能中断。

编写中断服务函数。 清除中断标志位

三:原理图分享:

可见当按键按下时候,PA2,PA3引脚电平为低电平。

四:STM32 cube MX软件配置过程:

4.1 配置 PA2 PA3为外部中断模式:

这里由于是低电平有效,所以这里我配置为下降沿有效,同时将GPIO口设置为上拉模式。

4.2 使能外部中断,同时配置优先级别。

五:软件代码

5.1 GPIO 口初始化:

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Condiv GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

  /*Condiv GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3|GPIO_PIN_6, GPIO_PIN_RESET);

  /*Condiv GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);

  /*Condiv GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Condiv GPIO pins : PA2 PA3 */
  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Condiv GPIO pins : PD3 PD6 */
  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /*Condiv GPIO pin : PB4 */
  GPIO_InitStruct.Pin = GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 1);
  HAL_NVIC_EnableIRQ(EXTI2_IRQn);

  HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 1);
  HAL_NVIC_EnableIRQ(EXTI3_IRQn);

}

5.2 编写外部中断的回调函数:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{

	if(GPIO_Pin == GPIO_PIN_3)
	{
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); 
	}
	else if(GPIO_Pin == GPIO_PIN_2)
	{
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); 
	}

}

5.3 中断的运用场景:

 按钮/开关控制:当用户按下按钮或切换开关时,可以触发外部中断来响应用户的操作,例如控制LED的亮灭或执行特定功能。这种中断类型常用于用户界面交互,如按键控制设备启动、停止或切换模式。

 传感器触发:当传感器检测到特定事件或条件发生时(如温度达到阈值、光线强度变化等),可以触发外部中断来及时处理传感器数据。这种中断类型在环境监测、工业自动化等领域有广泛应用。

六:测试视频如下所示:

申请原创奖励
昨天 20:22
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
聪聪哥哥
最新帖子
【星允派 NEBULA PI】07:IIC驱动24C02【星允派 NEBULA PI】05:调试外部中断【星允派 NEBULA PI】04:DMA+空闲中断收发数据【星允派 NEBULA PI】03:调试串口1的输出【星允派 NEBULA PI】01:了解开发板资源,环境准备
热门版块
查看更多
问型号
问技术
问行情
电子DIY
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

点赞

收藏

分享

微信扫码
分享给好友

评论