Air001外部中断/事件控制器功能

news2025/1/21 11:32:28

Air001外部中断/事件控制器


  • ✨对于外部中断,一般单片机基本标配的硬件功能,使用方法也没有什么特别的地方,对于事件控制器,用于停机模式下唤醒单片机功能,但是使用起来很简单,只需配置其引脚模式即可。
  • 🔖目前只看到该芯片的数据手册,没有看到参考手册,也没法具体了解其机制原理。
  • 🔰Stop mode(停机模式):该模式下 SRAM 和寄存器的内容保持,HSI 和 HSE 关闭,VDD 域下大部分模块的时钟都被停掉。GPIO,COMP output,LPTIM 可以唤醒 stop 模式。
    注: 在进入停机式时,IWDG和对应的时钟不会被停止。

📓外部中断/事件控制器(EXTI)数据手册描述语:

外部中断/事件控制器包含19个边沿检测器,用于产生中断/事件请求。每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿),并能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。18个通用I/O口连接到16个外部中断线。

🌻配置外部中断

/**
  * @brief  配置EXTI
  * @param  无
  * @retval 无
  */
static void APP_ConfigureExti(void)
{
  /* 配置引脚 */
  GPIO_InitTypeDef  GPIO_InitStruct;
  __HAL_RCC_GPIOA_CLK_ENABLE();                  /* 使能GPIOA时钟 */
  GPIO_InitStruct.Mode  = GPIO_MODE_IT_FALLING;  /* GPIO模式为下降沿中断 */
  GPIO_InitStruct.Pull  = GPIO_PULLUP;           /* 上拉 */
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  /* 速度为高速 */
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* 使能EXTI中断 */
  HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
  /* 配置中断优先级 */
  HAL_NVIC_SetPriority(EXTI2_3_IRQn, 0, 0);
}

/*EXTI中断函数*/
void EXTI2_3_IRQHandler(void)
{
    /* LED翻转 */
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
//		printf("EXTI2_3_IRQHandler \n");

}

🌼引脚事件配置

  • 🌿只需将引脚模式配置为对应的事件触发模式即可,没有中断服务函数
/**
  * @brief  配置事件引脚引脚
  * @param  无
  * @retval 无
  */
static void APP_ConfigureEXTI(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct;
    __HAL_RCC_GPIOA_CLK_ENABLE();                  /* 使能GPIOA时钟 */
    GPIO_InitStruct.Mode  = GPIO_MODE_EVT_FALLING; /* GPIO模式为下降沿中断 */
    GPIO_InitStruct.Pull  = GPIO_PULLUP;           /* 上拉 */
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  /* 速度为高速 */
    GPIO_InitStruct.Pin = GPIO_PIN_6;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
  • 📑停机模式下,事件唤醒main代码
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "Button.h"
/* Private define ------------------------------------------------------------*/
//EXTI_HandleTypeDef exti_handle;

/* Private variables ---------------------------------------------------------*/
/* Private user code ---------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
static void APP_ConfigureEXTI(void);

/**
  * @brief  应用程序入口函数.
  * @retval int
  */
int main(void)
{
    /* 复位所有外设,初始化flash接口和systick */
    HAL_Init();

    /* 初始化LED */
    MX_GPIO_Init();

	/* 初始化按键BUTTON :PF4 -->Boot0按键*/
    BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_GPIO);

    /* 配置外部中断 */
    APP_ConfigureEXTI();

    /* 暂停systick */
    HAL_SuspendTick();

    /* 点亮小灯 */
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

    /* 等待用户按键按下,主机程序开始运行 */
    while(BSP_PB_GetState(BUTTON_KEY) == 0)
    {
    }

    /* 关闭小灯 */
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    /* 进入STOP模式 */
    HAL_PWR_EnterSTOPMode(1, PWR_SLEEPENTRY_WFE);

    /* 恢复systick */
    HAL_ResumeTick();

    while(1)
    {
        /* LED翻转 */
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
        HAL_Delay(500);

    }
}

/**
  * @brief  配置事件引脚引脚
  * @param  无
  * @retval 无
  */
static void APP_ConfigureEXTI(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct;
    __HAL_RCC_GPIOA_CLK_ENABLE();                  /* 使能GPIOA时钟 */
    GPIO_InitStruct.Mode  = GPIO_MODE_EVT_FALLING; /* GPIO模式为下降沿中断 */
    GPIO_InitStruct.Pull  = GPIO_PULLUP;           /* 上拉 */
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  /* 速度为高速 */
    GPIO_InitStruct.Pin = GPIO_PIN_6;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

📚Air001外部中断和停机模式事件唤醒个人测试例程

  • 🌿从SDK例程资源移植出来的,工程无需配置可独立编译。如不需要生成BIN文件可以取消勾选。
    在这里插入图片描述
  • 🌿外部中断例程
链接:https://pan.baidu.com/s/17beYWaPTUdVLXrZ77LYMbQ 
提取码:vhn5
  • 🌿停机模式事件例程
链接:https://pan.baidu.com/s/1AiuNOeNkxFgz2MiskKNTsw 
提取码:lclm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/883780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+django+mysql项目实践五(信息搜索)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 信息搜素 输入内容进行搜索,内容有文本类和时间类 文本类需要模糊搜索,包含即检索 时间类需要选取时间范围内的内容 views 利用Q完成对指定内容的检索 检索后按检索内容更新…

Linux简介--基础操作--文件传输(linux-Windows)

简介: 1、linux和windows都是操作系统,多任务,多用户,多线程… Linux免费使用,自由传播,开源 2、Linux 发行版(都是基于linux内核穿的外套) Ubuntu——嵌入式开发 fedora——早期嵌入…

编程小白的自学笔记十三(python办公自动化读写文件)

系列文章目录 编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二) 编程小白的自学笔记十一(python爬虫入门三Selenium的使用实例详解) 编程小白的自学笔记十(python爬虫入门二实例代码详解)…

【Linux】IO多路转接——poll接口

目录 poll初识 poll函数 poll服务器 poll的优点 poll的缺点 poll初识 poll也是系统提供的一个多路转接接口。 poll系统调用也可以让我们的程序同时监视多个文件描述符上的事件是否就绪,和select的定位是一样的,适用场景也是一样的。 poll函数 po…

首起针对国内金融企业的开源组件投毒攻击事件

简述 2023年8月9日,墨菲监控到用户名为 snugglejack_org (邮件地址:SnuggleBearrxxhotmail.com)的用户发布到 NPM 仓库中的 ws-paso-jssdk 组件包具有发向 https://ql.rustdesk[.]net 的可疑流量,经过确认该组件包携带远控脚本&a…

Qt 之 QPushButton,信号与槽机制

文章目录 前言一、QPushButton二、信号与槽机制总结 前言 一、QPushButton 当我们开发基于Qt框架的图形用户界面(GUI)应用程序时,经常需要在界面上添加按钮来实现用户交互。Qt提供了一个名为 QPushButton 的类作为按钮控件的实现。QPushButt…

BIO、NIO和AIO

一.引言 何为IO 涉及计算机核心(CPU和内存)与其他设备间数据迁移的过程,就是I/O。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。 I/O 描述了计算机系统…

Steam 灵感的游戏卡悬停效果

先看效果&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Steam 灵感的游戏卡悬停效果</title><style>* {margin: …

云计算虚拟仿真实训平台

一、云计算虚拟仿真系统概述 云计算虚拟仿真系统是一种基于云计算技术和虚拟化技术的系统&#xff0c;用于实现各种仿真和模拟任务。它可以提供强大的计算能力和资源管理&#xff0c;为用户提供灵活、高效、可扩展的仿真环境。 该系统通常由一组服务器、网络和存储设备组成&am…

步入React正殿 - State进阶

目录 扩展学习资料 State进阶知识点 状态更新扩展 shouldComponentUpdate PureComponent 为何使用不变数据【保证数据引用不会出错】 单一数据源 /src/App.js /src/components/listItem.jsx 状态提升 /src/components/navbar.jsx /src/components/listPage.jsx src/A…

【AIGC】 快速体验Stable Diffusion

快速体验Stable Diffusion 引言一、安装二、简单使用2.1 一句话文生图2.2 详细文生图 三、进阶使用 引言 stable Diffusion是一款高性能的AI绘画生成工具&#xff0c;相比之前的AI绘画工具&#xff0c;它生成的图像质量更高、运行速度更快&#xff0c;是AI图像生成领域的里程碑…

【0815作业】搭建select的TCP客户端、poll客户端、tftp文件上传

IO多路复用&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 进程中如果同时需要处理多路输入输出流&#xff0c;在使用单进程单线程的情况下&#xff0c;同时处理多个输入输出请求。在无法用多进程多线程&#xff0c;可以选择用IO多路复用&#xff1b;由于不…

新手开抖店多久可以出单?

​开抖店是一种越来越流行的创业方式&#xff0c;在社交媒体平台上开店销售各种商品&#xff0c;比如服装、配饰、美妆和家居用品等等。对于新手来说&#xff0c;他们可能会很关心自己开抖店能够多久出单。虽然这个问题没有一个固定的答案&#xff0c;但是以下是一些关键的运营…

立中转债上市价格预测

立中转债 基本信息 转债名称&#xff1a;立中转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.998亿元。 正股名称&#xff1a;立中集团&#xff0c;今日收盘价&#xff1a;23.46元&#xff0c;转股价格&#xff1a;23.57元。 当前转股价值 转债面值 /…

synchronized 底层是如何实现的 ?

目录 1. synchronized 底层是如何实现的 2. 监视器的执行流程 1. synchronized 底层是如何实现的 synchronized 底层是通过 JVM 内置的 Monitor 监视器实现的。 以下代码&#xff0c;查看它运行时的字节码文件&#xff1a; public class SynchronizedMonitorDemo {public …

MySQL 主从复制遇到 1590 报错

作者通过一个主从复制过程中 1590 的错误&#xff0c;说明了 MySQL 8.0 在创建用户授权过程中的注意事项。 作者&#xff1a;王祥 爱可生 DBA 团队成员&#xff0c;主要负责 MySQL 故障处理和性能优化。对技术执着&#xff0c;为客户负责。 本文来源&#xff1a;原创投稿 爱可生…

【图像分类】理论篇(4)图像增强opencv实现

随机旋转 随机旋转是一种图像增强技术&#xff0c;它通过将图像以随机角度进行旋转来增加数据的多样性&#xff0c;从而帮助改善模型的鲁棒性和泛化能力。这在训练深度学习模型时尤其有用&#xff0c;可以使模型更好地适应各种角度的输入。 原图像&#xff1a; 旋转后的图像&…

当Visual Studio遇到 “当前不会命中断点.还没有为该文档加载任何符号“的情况

1.配置项目调试路径&#xff1a; 2.问题解决方案&#xff1a; VS配置调试路径不是默认路径时&#xff0c;需要看生成的文件是否在配置路径内&#xff0c;如果不在的话&#xff0c;可能发生"当前不会命中断点.还没有为该文档加载任何符号"的情况&#xff1b; 右键项…

【贪心】CF1779 D

不会1700 Problem - 1779D - Codeforces 题意&#xff1a; 思路&#xff1a; 首先手推样例&#xff0c;可以发现一些零碎的性质&#xff1a; 然后考虑如何去计算贡献 难点在于&#xff0c;当一个区间的两端是区间max时&#xff0c;怎么去计算贡献 事实上&#xff0c;只需要…

input输入框自动填充后消除背景色

一般自动填充后会有一个突出的浅蓝色背景&#xff0c;一定也不好看&#xff0c;所以想把它去掉&#xff1a; 这个时候&#xff0c;就要用到浏览器的样式设置了&#xff1a; input:-webkit-autofill {background: transparent;transition: background-color 50000s ease-in-ou…