STM32-笔记5-按键点灯(中断方法)

ops/2024/12/22 15:10:03/

 1、复制03-流水灯项目,重命名06-按键点灯(中断法)

        在\Drivers\BSP目录下创建一个文件夹exti,在该文件夹下,创建两个文件exti.c和exti.h文件,并且把这两个文件加载到项目中,打开项目工程文件

         加载完新建的文件之后,找到exti.c文件双击打开,写入代码:

#include "sys.h"
#include "exti.h"

编译项目,编译通过,找到exti.h文件,双击打开,写入代码:

#ifndef __EXTI_H__
#define __EXTI_H__

#endif

2、代码

 exti.c

#include "sys.h"
#include "exti.h"
#include "delay.h"
#include "led.h"void exti_init(void)
{//使能GPIO时钟GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct//打开时钟-使能GPIO时钟__HAL_RCC_GPIOA_CLK_ENABLE();//设置GPIO输入模式//设置AFIO(开启时钟,IO口映射)//设置EXTI(屏蔽,上/下沿)//调用GPIO初始化函数gpio_initstruct.Mode = GPIO_MODE_IT_FALLING;//下降沿输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度gpio_initstruct.Pin = GPIO_PIN_0;//LED1对应的引脚gpio_initstruct.Pull = GPIO_PULLUP;//上拉HAL_GPIO_Init(GPIOA,&gpio_initstruct);//设置NVIC(优先级分组,设置优先级,使能中断)HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);HAL_NVIC_EnableIRQ(EXTI0_IRQn);}
//设置中断服务函数
void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}
//回调函数
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();}
}

 在设置优先级分组进入函数

把这里的4改成2,优先级分组只需要设置一次

exti.h

#ifndef __EXTI_H__
#define __EXTI_H__void exti_init(void);#endif

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();//初始化led灯exti_init();while(1){ led2_OFF();delay_ms(500);led2_ON();delay_ms(500);}
}


http://www.ppmy.cn/ops/144050.html

相关文章

鸿蒙审核版本页面显示异常之混淆代码问题

鸿蒙审核版本页面显示异常之混淆代码问题 参考文档 代码写的好好的,真机测试也运行的好好的,高高兴兴的提测去了。都填好了之后就等着测试结果了。 等了半天收到了一个页面无法展示的评审意见。啊,难道是测试的网络有问题?还是…

C++ 面向对象编程

面向对象编程(Object-Oriented Programming, OOP)是C语言的一个重要特性,它允许开发者以更直观和模块化的方式来设计和构建程序。OOP的四个主要原则是:封装(Encapsulation)、继承(Inheritance&a…

npm下载依赖相关命令

目录 一、基本命令 1.查看npm版本 2.升级npm 3.查看帮助 4.初始化项目 二、包管理命令 1.安装依赖 2.查看已安装的包 3.更新包 4.卸载包 5.查看包信息 6.搜索包 三、配置与发布命令 1.查看配置信息 2.设置配置信息 3.删除配置信息 4.登录npm 5.发布包 6.设…

flux模型的下载、配套及简易使用记录(ubuntu)

我在学习使用时,很迷惘各个模型放在什么 位置。以及他们的作用。所以系统的了解了一下。然后记录了,一下,希望能帮助到想了解这个知识的朋友。 另外,我将持续的更新这个专辑。记录我在学习和使用过程中关于comfy的方面。希望得到…

SEO初学者-搜索引擎如何工作

搜索引擎基础搜索引擎是如何建立索引的搜索引擎如何对网页进行排名搜索引擎是如何个性化搜索结果的 搜索引擎的工作方式是使用网络爬虫抓取数十亿个页面。爬虫也称为蜘蛛或机器人,它们在网络上导航并跟踪链接以查找新页面。然后,这些页面会被添加到搜索引…

为markdown导出的pdf添加页眉页脚

为Markdown导出的PDF添加页眉页脚 环境 vscode扩展:Markdown PDF 操作方式 快捷键 Ctrl, 打开设置搜索 “markdown-pdf”找到设置 页眉: Markdown-pdf: Header Template页脚: Markdown-pdf: Footer Template 页眉插入示例内容: 此处使用base64内嵌…

指令-v-for的key

在Vue.js中,v-for指令用于循环渲染数组或对象的元素。在使用v-for指令时,需要提供一个唯一的key属性来帮助Vue.js跟踪每个元素的身份,以便在更新渲染时能够正确地复用和删除元素。 key属性在v-for循环中的作用主要有两个方面: 帮…

前端入门之VUE--ajax、vuex、router,最后的前端总结

前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。本人不是学前端的,这个是大一的时候上学的和做的笔记,那个时候学的也蒙,故这里对前端做一个总…