STM32中断控制点灯

news/2024/10/5 14:07:23/

1.使能GPIO时钟: __HAL_RCC_GPIOA_CLK_ENABLE();    //使能GPIOA时钟

2.设置GPIO输入模式

2.1设置AFIO(开启时钟,IO口映射)

2.2设置EXTI(屏蔽,上/下沿)

第二项使用  HAL_GPIO_Init ,即可一步完成

3.设置NVIC(中断优先级分组,设置中断优先级,使能中断)

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);  //在 HAL_Init(); 中进行配置,配置一次即可

HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);  //函数参数:响应中断号,抢占优先级,响应优先级 HAL_NVIC_EnableIRQ(EXTI0_IRQn);      //使能中断

4.设计中断服务函数

EXTI0_IRQHandler()

STM32仅有:EXTI0~4、EXTI9~5、EXTI15~10,7个外部中断服务函数 

 按键开关引脚PA0,低电平触发,也就是检测该引脚是否为低电平,注意按键要接上拉电阻

#include "sys.h"
#include "exti.h"
#include "delay.h"
#include "LED.h"
void exti_init(void)
{GPIO_InitTypeDef gpio_initstruct;//定义结构体变量,GPIO初始化要用到//打开时钟__HAL_RCC_GPIOA_CLK_ENABLE();    //使能GPIOA时钟//调用GPIO初始化函数gpio_initstruct.Pin = GPIO_PIN_0;  //初始化一个引脚,gpio_initstruct.Mode = GPIO_MODE_IT_FALLING; //下降沿,中断相关gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速gpio_initstruct.Pull = GPIO_PULLDOWN;         //上拉HAL_GPIO_Init(GPIOA,&gpio_initstruct);//对定义的结构体变量取地址//开始设立分组2,配置优先级,使能HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);//函数参数:响应中断号,抢占优先级,响应优先级HAL_NVIC_EnableIRQ(EXTI0_IRQn);    //使能中断}
void EXTI0_IRQHandler(void)                    //中断服务函数
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);      //这个函数处理EXTI中断请求
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //回调函数
{delay_ms(20);                              //消抖if (GPIO_Pin==GPIO_PIN_0){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET){LED1_toggle();}}}/*****************main.c****************************************/
#include "sys.h"
#include "delay.h"
#include "LED.h"
#include "exti.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */LED_init();exti_init();while(1){ LED2_off();delay_ms(500);LED2_on();delay_ms(500);}
}

 中断服务函数无参数无返回值,

中断服务函数选择中断线EXTI0,故函数形式 EXTI0_IRQHandler

 有中断 挂起寄存器(EXTI_PR)  PR就被置1,读的时候又会自动清零 

下面是中断处理函数和回调函数,回调函数内容可自己编写代码

 


http://www.ppmy.cn/news/1533945.html

相关文章

Linux下的驱动开发一

设备驱动 设备驱动程序(Device Driver)是操作系统中的一种软件组件,负责管理和控制计算机硬件设备的工作。驱动程序通过提供操作系统和硬件设备之间的接口,使得操作系统和应用程序能够与硬件设备进行交互,而无需了解硬…

Elasticsearch基础_5.ES聚合功能

文章目录 一、数据聚合1.1、桶聚合1.1.1、单维度桶聚合1.1.2、聚合结果排序1.1.3、限定聚合范围 1.2、Metric聚合 二、聚合总结 本文只记录ES聚合基本用法,后续有更复杂的需求可以查看相关书籍,如《Elasticsearch搜索引擎构建入门与实战》 一、数据聚合…

Spring Boot+VUE《班级综合测评管理系统》

文章目录 前言 一、总体设计 二、数据库设计 概念模型设计: 教师管理实体图所示: 三、系统功能的详细设计与实现 1 管理员功能模块 2学生功能模块 3教师功能模块 四、资源下载链接 前言 本课题在充分研究了在Springboot框架基础上,采用B/S模式&#xff0…

15分钟学 Python 第34天 :小项目-个人博客网站

Day 34: 小项目-个人博客网站 1. 引言 随着互联网的普及,个人博客已成为分享知识、体验和见解的一个重要平台。在这一节中,我们将使用Python的Flask框架构建一个简单的个人博客网站。我们将通过实际的项目来学习如何搭建Web应用、处理用户输入以及管理…

小程序-使用npm包

目录 Vant Weapp 安装 Vant 组件库 使用 Vant 组件 定制全局主题样式 API Promise化 1. 基于回调函数的异步 API 的缺点 2. 什么是 API Promise 化 3. 实现 API Promise 化 4.调用 Promise 化之后的异步 API 小程序对 npm 的支持与限制 目前,小程序中已经…

云计算SLA响应时间的matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 用matlab模拟,一个排队理论。输入一堆包,经过buffer(一个或者几个都行)传给server,这些包会在buffer里…

5 apache poi实现excel的动态下拉框功能

excel下拉框 RequestMapping("xiala")public void xiala(HttpServletResponse response){String fileName "僵尸表";try{response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharact…

小程序兼容问题

【微信小程序】安卓兼容问题,scroll-view上拉导致input输入框上移 引用:https://blog.csdn.net/krico233/article/details/127491690 当一个scroll-view占据全屏高度(100vh)并包含input表单时,输入框聚焦会导致光标上移但输入框本身位置不变…