【STM32+HAL库】---- 按键中断控制LED

embedded/2024/9/25 10:27:09/
硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode

1 新建cubemax工程

1.1 配置系统时钟树

image

1.2 配置相关GPIO引脚

①LED由PC13引脚控制
image
选择PA5引脚,GPIO_Output模式
image
GPIO模式配置:
image

②按键开关由PC13引脚控制
image
选择PC13引脚,GPIO_EXTIx模式,其中13表示13号中断线
image
GPIO模式配置:按键设置为下降沿触发中断(LED)
image

1.3 配置NVIC中断

勾上Enabled (G0系列相比于F1系列没有优先级Group配置)
image

1.4 导出工程

…略

2 中断处理流程

① main.c 中的 MX_GPIO_Init() 函数调用HAL库里的使能中断函数和设置中断优先级函数
image

② 在 HAL_NVIC_EnableIRQ() 中调用 NVIC_EnableIRQ()
image

③ 当触发中断时,处理器查表跳转到位于 stm32g0xx.it.c 里的中断服务程序 EXTIx_IRQHandler(void) 【这里的x指中断线】;中断服务程序 EXTIx_IRQHandler (void) 中调用外部中断通用处理函数HAL_GPIO_EXTI_IRQHandler (uint16_t GPIO_Pin) ,该函数作为HAL库提供的外部中断接口函数,参量为触发中断的引脚
image

④相比较于F系列,G0系列的HAL_GPIO_EXTI_IRQHandler (uint16_t GPIO_Pin)里所调用的中断回调函数分成了上升沿和下降沿两部分
G0系列:
image

F1/F4系列:
image

⑤在stm32g0xx.it.c 中重写对应类型的中断回调函数,并补全中断所需要执行的任务函数

3 代码

重写下降沿中断回调函数

//微秒级的延时
void delay_us(uint32_t delay_us)
{volatile unsigned int num;volatile unsigned int t;for (num = 0; num < delay_us; num++){t = 11;while (t != 0){t--;}}
}//毫秒级的延时
void delay_ms(uint16_t delay_ms)
{volatile unsigned int num;for (num = 0; num < delay_ms; num++){delay_us(1000);}
}//下降沿回调函数
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin==BUTTON_Pin){delay_ms(20);     /*消抖*/if (GPIO_Pin==BUTTON_Pin){HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);while (BUTTON_Pin==0);}}
}

http://www.ppmy.cn/embedded/105375.html

相关文章

Pytorch安装 CUDA Driver、CUDA Runtime、CUDA Toolkit、nvcc、cuDNN解释与辨析

Pytorch的CPU版本与GPU版本 Pytorch的CPU版本 仅在 CPU 上运行&#xff0c;适用于没有显卡或仅使用 CPU 的机器。安装方式相对简单&#xff0c;无需额外配置 CUDA 或 GPU 驱动程序。使用方式与 GPU 版相同&#xff0c;唯一不同的是计算将自动在 CPU 上进行。 Pytorch的GPU版…

系统思考—关键决策

结‮影构‬响行为&#xff0c;精‮决准‬策创造价值&#xff01; 最‮身近‬边很多‮伙小‬伴找我“助力”&#xff0c;父‮也母‬经常发‮息信‬让我帮忙&#xff0c;忍‮住不‬研究了一下‮些这‬助力活动的“玩法”。说实话&#xff0c;这‮设种‬计从‮构结‬上真‮很的‬…

安防视频综合管理系统EasyCVR视频汇聚平台集群部署出现状态不同步的情况是什么原因?

随着视频监控技术的快速发展&#xff0c;各类视频资源的整合、管理与分发成为了安防行业的重要挑战。视频综合管理系统EasyCVR视频汇聚平台通过集群部署&#xff0c;实现了视频资源的高效整合与管理。集群部署不仅能够提升系统的处理能力和稳定性&#xff0c;还能有效避免单点故…

服务器出现故障怎么办?快速排查与解决方法

当服务器出现故障时&#xff0c;可能会导致业务中断&#xff0c;给企业或个人带来不小的损失。为了尽快恢复服务&#xff0c;我们需要迅速定位问题并采取相应的解决措施。下面&#xff0c;我们将介绍一些服务器故障的快速排查与解决方法。 常见服务器故障及原因 服务器故障可…

PyQt6 / PySide 6 实现可拖拽的多标签页 web 浏览器【1】(有 Bug)

声明&#xff1a; 本项目代码来自以下两个项目 PyQt 5 / PySide 2 实现 QTabWidget 的拖入拖出功能 https://github.com/akihito-takeuchi/qt-draggable-tab-widget SimPyWeb X —— 使用PyQt5以及QWebEngineView构建网页浏览器 Bug: 存在很多问题&#xff1a; 1. 新拖拽的…

互联网 Java 工程师面试题(Java 面试题四)

下面列出这份 Java 面试问题列表包含的主题 多线程&#xff0c;并发及线程基础数据类型转换的基本原则垃圾回收&#xff08;GC&#xff09;Java 集合框架数组字符串GOF 设计模式SOLID抽象类与接口Java 基础&#xff0c;如 equals 和 hashcode泛型与枚举Java IO 与 NIO常用网络协…

4.负载均衡

文章目录 1.多级部署2.实现请求计数器3.负载均衡3.1服务端负载均衡3.2客户端负载均衡3.3自定义负载均衡3.4负载均衡策略3.5 LoadBalance 原理 4.部署实现 大家好&#xff0c;我是晓星航。今天为大家带来的是 负载均衡 相关的讲解&#xff01;&#x1f600; 1.多级部署 复制一…

Python常用库-nump的使用

文章目录 安装 NumPy导入 NumPy创建数组1. 使用列表创建数组2. 多维数组3. 使用特殊函数 数组的基本操作1. 数组形状和大小2. 数据类型3. 转换数据类型4. 数组索引5. 数组切片6. 维度转换7. 数组连接8. 数组分割 数学运算1. 算术运算2. 广播机制3. 统计函数4. 最大最小值5. 排序…