【STM32】stm32如何处理多任务下的按键操作?

在STM32中处理多任务下的按键操作,通常需要使用中断服务程序(Interrupt Service Routine, ISR)来响应按键事件。以下是一个简单的示例,展示了如何在STM32上实现多任务环境下的按键检测和处理:

1.首先,配置按键对应的GPIO引脚为输入模式,并启用内部上拉电阻。同时,配置外部中断以触发按键事件。

void EXTI_Config(void) {// 初始化按键对应的GPIO引脚GPIO_InitTypeDef GPIO_InitStructure; // 定义GPIO初始化结构体变量RCC_APB2PeriphClockCmd(KEY_GPIO_CLK, ENABLE); // 使能按键对应的GPIO时钟GPIO_InitStructure.GPIO_Pin = KEY_PIN; // 设置按键对应的GPIO引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 设置为上拉输入模式,用于读取按键状态GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure); // 根据设定的参数初始化GPIO端口// 初始化外部中断NVIC_InitTypeDef NVIC_InitStructure; // 定义NVIC初始化结构体变量NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // 设置NVIC优先级分组为1,即4位抢占优先级和0位响应优先级NVIC_InitStructure.NVIC_IRQChannel = KEY_IRQn; // 设置中断通道为按键对应的中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 设置抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 设置响应优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道NVIC_Init(&NVIC_InitStructure); // 根据设定的参数初始化NVIC中断控制器
}

2.编写按键中断服务程序(ISR),用于处理按键事件。在这个例子中,我们假设有两个任务需要处理按键事件,分别为Task1Task2。

// 定义一个中断处理函数,用于处理按键中断事件
void KEY_IRQHandler(void) {// 检查是否有按键中断发生if (EXTI_GetITStatus(KEY_EXTI_LINE) != RESET) {// 清除中断标志位,以便下次中断可以正常触发EXTI_ClearITPendingBit(KEY_EXTI_LINE);// 判断按键的状态(按下或松开)if (/* 按键按下的条件 */) {// 如果按键被按下,执行任务1Task1();} else {// 如果按键没有被按下,执行任务2Task2();}}
}

3.定义两个任务函数Task1Task2,分别对应不同的按键操作


void Task1(void) {// 在这里编写任务1的处理逻辑
}void Task2(void) {// 在这里编写任务2的处理逻辑
}

4.最后,在主循环中调用这两个任务函数。


int main(void) {// 初始化硬件和外设EXTI_Config();while (1) {// 主循环中的其他任务Task1();Task2();}
}

这样,当按键被按下时,中断服务程序会被触发,并根据按键状态执行相应的任务。这种方法可以实现多任务环境下的按键操作。需要注意的是,实际应用中可能需要对按键消抖、按键长按和短按等情况进行额外处理。

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

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

相关文章

鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南

文章目录 一、消息提示框(showToast)1、导入模块2、语法3、参数4、示例5、效果 二、对话框(showDialog)1、导入模块2、语法3、参数4、示例5、效果 三、警告弹窗(AlertDialog)1、语法2、参数3、AlertDialogP…

STM32的GPIO输入输出方式设置示例

1、GPIO口做基本的输入/输出口使用时,输入有上拉输入、下拉输入、浮空输入(既无上拉电阻也无下拉电阻)3种输入方式;输出有开漏输出、推挽输出2种输出方式。 2、示例 (1)示例1:GPIO做输出的设置…

项目比赛经验分享:如何让即兴发言出彩

项目比赛经验分享:如何让即兴发言出彩 前言1. 顺势趁便法2. 词语撮要法3. 起承转合法4. 数字串连法结语 在项目管理和比赛的激烈竞争中,即兴发言往往成为展示个人魅力和团队精神的重要环节。如何在短时间内组织语言,表达清晰、有力的观点&…

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页

前文功能的实现 技术支持:JAVA、JSP 服务器:TOMCAT 7.0.86 编程软件:IntelliJ IDEA 2021.1.3 x64 前文三篇登录和注册功能的实现 基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建&#xf…

Cisco路由器OSPF配置

Cisco路由器OSPF配置 本文已经迁移至 https://www.geekery.cn 本文档将详细介绍如何配置 OSPF(开放最短路径优先)协议,使用三个路由器:RA、RB 和 RC。一步一步说明每个路由器的配置、设置 IPv4 和 IPv6 地址的、配置OSPF 的启用以…

2017年研究生数学建模优秀论文汇总

2017年全国研究生数学建模竞赛题目解压缩密码 解压缩密码:xWZx2017xajTdx 题目加密文件下载地址:2017年全国研究生数学建模竞赛题目(加密文件) A题:无人机在抢险救灾中的优化运用论文1 论文2 论文3 论文4 论文5 论文…

二分查找代码详解

二分查找代码实现 以下是完整的代码和解释&#xff1a; #include <stdio.h>int binarySearch(int arr[], int length, int target) {int left 0;int right length - 1;while (left < right) {int mid left (right - left) / 2; // 防止溢出if (arr[mid] target…

Cocos Creator2D游戏开发-(1)初始化设置

初心: 做一款微信或者抖音小游戏,然后发布,对于我来说这是一个新的赛道; 写这些文档的原因,记录一下自己学习过程,下次用的时候方便找 cocos creator版本: 3.8.3 当前小游戏飞机大战教程来源于: 抖音: 禅影 chanying001 源码目录: https://www.kdocs.cn/l/caLr6XCbEfPa 创建一个…

zeal 开发者离线文档工具

zeal是一款程序开发者不可或缺的离线文档查看器 下载地址 官网地址&#xff1a; windows版csdn下载(开箱即用含)&#xff1a;https://download.csdn.net/download/xzzteach/89588765 已离线 Android.docset Apache_HTTP_Server.docset Bash.docset Bootstrap_4.docset Bootst…

selenium入门超详细教程——网页自动化操作

文章目录 简介一、环境安装1.selenium安装2.安装浏览器驱动2.1 确定浏览器版本2.2 下载驱动 二、基础用法1.对页面进行操作1.1 初始化浏览器对象1.2 访问页面1.3 设置浏览器大小1.4 前进后退1.5 获取页面基础属性 2.定位页面元素3.模拟鼠标操作3.1 常用操作 4.模拟键盘操作4.1 …

测评Copilot和ChatGPT-4o从PDF创建PPT功能

关于 Copilot 由 PDF 创建 PPT&#xff0c;之前已经发过几篇文档说明&#xff1a; Copilot for Microsoft 365 现已支持从PDF创建Word和PPT Copilot读PDF文献一键生成PPT&#xff0c;吓傻了导师 Copilot一键将PDF转为PPT&#xff0c;治好了我的精神内耗 今天来测评对比 Cop…

GO版本更新

背景&#xff1a;项目go.mod使用版本为1.22&#xff0c;而本机为1.20&#xff0c;需要安装新版本&#xff08;注&#xff1a;当当前目录使用go.mod管理项目时&#xff0c;不需要指定 project 的 GOPATH&#xff0c;否则运行报错 $gopath/go.mod exists but should not&#xff…

在LabVIEW中使用Modbus

NI 提供了三种主要机制与 Modbus 设备进行接口&#xff1a;(1) 高级 OPC 服务器&#xff0c;(2) Modbus I/O 服务器&#xff0c;以及 (3) 在 NI LabVIEW 软件中通过 LabVIEW 实时或 LabVIEW 数据记录与监控控制&#xff08;DSC&#xff09;模块引入的低级 Modbus API。 LabVIE…

黑马Java零基础视频教程精华部分_8_学生管理系统

系列文章目录 文章目录 系列文章目录一、业务分析二、结合业务流程图编写代码1、Student.java代码&#xff1a;2、StudentSystem.java代码&#xff1a;3、标号&#xff08;‌label&#xff09;‌ 三、学生管理系统升级版 一、业务分析 需求文档如图所示&#xff1a; 根据需求…

【初阶数据结构篇】单链表的实现(赋源码)

文章目录 单链表的实现代码位置概念与结构概念&#xff1a;结构&#xff1a; 链表的性质链表的分类单链表的实现单链表的创建和打印及销毁单链表的创建单链表的打印单链表的销毁 单链表的插入单链表头插单链表尾插单链表在指定位置之前插入数据单链表在指定位置之后插入数据 单…

SAP MM学习笔记47 - 实地棚卸(库存盘点)

上一章讲了SAP MM模块种的出力管理&#xff08;消息管理&#xff09;。 SAP MM学习笔记46 - 购买中的出力管理(消息管理)-CSDN博客 本章讲库存盘点的相关内容。 - 库存盘点分3步走&#xff1a;实地棚卸票登录&#xff0c;检数入力&#xff0c;差异分析及转记 - SAP中还提供了…

学习笔记 韩顺平 零基础30天学会Java(2024.7.22)

P407 接口使用细节2 P407 接口课堂练习 对于最后一个的输出&#xff1a;B因为实现了A的接口&#xff0c;所以和继承一样&#xff0c;B可以访问A的变量 P409 接口VS继承 接口对单继承机制&#xff08;是指只能继承一个类&#xff09;进行了补充 也可以理解为&#xff0c;子类通过…

【IDEA】子模块导包爆红,IDEA在错误的地方(父模块)自动添加依赖

文章目录 问题背景解决方法 问题背景 IDEA中&#xff0c;我在子模块中添加了依赖&#xff0c;整个项目编译没问题&#xff0c;但导包爆红&#xff0c;IDEA非要我在父模块中添加依赖&#xff0c;这是为什么&#xff1f;这样会导致编译出问题。 解决方法 删除.idea目录&#x…

24种设计模式介绍与6大设计原则(电子版教程)

前言 您是一个初级的 coder,可以从中领会到怎么设计一段优秀的代码&#xff1b;您是一个高级程序员&#xff0c;可以从中全面了解到设计模式以及 Java 的边角技术的使用&#xff1b;您是一个顶级的系统分析师&#xff0c;可以从中获得共鸣&#xff0c;寻找到项目公共问题的解决…