STM32G030C8T6:使用按键控制LED亮灭(外部中断)

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考;

本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过KEY1 按键的PA0 引脚配置成中断输入引脚,PB9引脚配置成输出,每次按键,PA0 引脚就会进入一次外部中断,每进入一次中断服务程序,改变PB9 输出电平的高低,从而实现LED 灯的亮灭。
原理:通过KEY1按键的PA0引脚配置成中断输入引脚,PB9引脚配置成输出,每次按键,PA0引脚就会进入一次外部中断,每进入一次中断服务程序,改变PB9输出电平的高低,从而实现LED灯的亮灭。
涉及到的知识:GPIO外部中断输入,配置GPIO为输出引脚,STM32CubeMX的使用
我是将PB9引脚接的LED,所以本小节是以PB9为例记录的,如果需要将其他引脚配置为LED灯,那将PB4改为其他对应的引脚即可;

文章目录

  • 1 新建工程
  • 2 配置SWD下载引脚
  • 3 配置GPIO输出
  • 4 配置RCC
  • 5 设置系统主频
  • 6 配置按键外部中断
  • 7 外部中断使能
  • 8 生成工程
  • 9 增加代码实现按键控制LED

1 新建工程

点击File 菜单下的New Project

在这里插入图片描述

选择芯片型号,如下图所示先输入芯片型号,目前这边输入STM32G030C8,

在这里插入图片描述

双击选择,就确定了芯片型号,界面会变成如下图所示

在这里插入图片描述

2 配置SWD下载引脚

如下图所示,在Pinout&Configuration 栏目的System Core 下,先点击SYS,再勾选Serial Wire 框,
配置好SWD 下载引脚设置:

在这里插入图片描述

3 配置GPIO输出

按下图 的1,2,3 步骤完成PB4 引脚配置成GPIO 输出设置:

在这里插入图片描述

配置成功后如下图所示:
在这里插入图片描述

4 配置RCC

如下图,先点击RCC,在HSE 配置中选择Crystal/Ceramic Resonator 外部晶振设

在这里插入图片描述

5 设置系统主频

如下图, 先点击Clock Configuration 栏目,按下图的1,2,3,4 步骤完成系统64MHZ 主频设置:

在这里插入图片描述

6 配置按键外部中断

如下图的1,2步骤完成PA0引脚配置成GPIO 外部中断输入设置:
在这里插入图片描述

如下图1,2,3,4 步骤完成PA0 中断触发沿以及上下拉配置:
在这里插入图片描述

都配置完成后,如下图所示:

在这里插入图片描述

7 外部中断使能

如下图 的1,2 步骤完成外部中断使能配置,这样PC13 引脚电平有变化就会产生中断了。

在这里插入图片描述

8 生成工程

按照下图的步骤,进行项目配置,项目名称和路径设置等,生成项目的类型选择STM32CubeIDE(我这里以STM32CubeIDE为例,如果你要试用keil5,那就选择MDK-RAM,如果要使用makefile,就选择Makefile),注意项目名称和路径不要有中文名;
在这里插入图片描述

最后全部设置完毕后点击create code,生成项目代码:

在这里插入图片描述

生成的工程如下图所示:
在这里插入图片描述

9 增加代码实现按键控制LED

增加代码实现PA0 引脚进入一次外部中断,改变PB9 输出电平的高低

点击上一步生成的.project文件,会打开STM32CubeIDE,然后在stm32g0xx.it.c中,找到外部中断服务程序,如下图所示:

在这里插入图片描述

然后,在外部中断服务程序中调用的HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0)内
部,找到HAL_GPIO_EXTI_Rising_Callback 这个上升沿回调函数,如下图所示:

在这里插入图片描述
加入PB9 翻转输出就可以:

 HAL_GPIO_Togglepin(GPIOB,GPIO_PIN_9);//每次进入一次外部中断,实现PB9引脚翻转输出一次

在这里插入图片描述

至此,编译并调试,即可成功案件控制LED开关;

当程序开始后,LED灯是亮着的,按下按键,LED会变灭,再次按下按键,LED会点亮;

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

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

相关文章

写好ChatGPT提示词原则之:清晰且具体(clear specific)

ChatGPT 的优势在于它允许用户跨越机器学习和深度学习的复杂门槛,直接利用已经训练好的模型。然而,即便是这些先进的大型语言模型也面临着上下文理解和模型固有局限性的挑战。为了最大化这些大型语言模型(LLM)的潜力,关…

Spring 6(二)【IOC原理】

前言 1、IOC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 1.1、控制反转 控制反转不是技术…

visual Studio MFC 平台实现图片的傅里叶变换

图片的傅里叶变换 本文主要讲解傅里叶变换的基本数学概念与物理概念,并本文使用visual Studio MFC 平台实现对傅里叶变换在图片上进行了应用。 一、傅里叶变换的原理 在这里推荐一篇讲得非常形象的文章通俗讲解:图像傅里叶变换 1.1 傅里叶变换原理的说明…

idea__SpringBoot微服务11——整合Druid数据源(新依赖)(新注解)

整合JDBC 一、导入依赖二、配置Druid————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶ ̄),谢谢~~ 接着 第10的 新注解: ConfigurationProperties ConfigurationPropert…

【人工智能】实验四:遗传算法求函数最大值实验与基础知识

实验四:遗传算法求函数最大值实验 实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传算法求解函数优化问题,理解求解流程并测试主要参数对结果的影响。 实验内容 采用遗传算法求解函数最大值。 实验要求 1. 用遗传算法求解…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器(例如激光雷达)都会生成密集的点云。此类应用程序通常利用更先进的数据结构:例如,不…

053:vue工具--- 英文字母大小写在线转换

第047个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

QEMU源码全解析 —— virtio(13)

接前一篇文章: 通过前文书(从QEMU源码全解析 —— virtio(9)开始)对整个流程以及各个相关函数的解析,可以看到从virtio PCI代理设备的具现化到virtio设备的具现化过程。但前述分析还遗漏了一部分&#xff0…

LeetCode(69)对称二叉树【二叉树】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 对称二叉树 1.题目 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,nu…

朱卫明:从韶关走向世界的创作型歌手

朱卫明,艺名Aming,是一位来自广东韶关的杰出唱作音乐人。他以其独特的创作才华和深情的嗓音,赢得了众多歌迷的喜爱。作为一名创作型歌手,朱卫明用音乐传递情感,用歌声打动人心。 一、早年经历与音乐启蒙 朱卫明出生于…

Python开发工具PyCharm v2023.3全新发布——全面推出AI Assistant工具

JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 PyCharm v2023.3正式版下载 在 PyCharm 2023.3 中,每…

Linux Shell——输入输出重定向

输入输出重定向 1. 重定向输入2. 重定向输出 总结 最近学习了shell语法,总结一下关于输入输出重定向的知识。 一般情况下,linux每次执行命令其实都会打开三个文件,分别是: 标准输入stdin 文件描述符为0 标准输出stdout 文件描述符…

Text2SQL学习整理(一) 综述

数据库由一张或多张表格构成,表格之间的关系通过共同的列(外键)关联,人们使用数据库来方便的记录和存储信息。SQL是广泛应用的关系型数据库查询语言,但是对于普通用户而言,编写SQL语句有一定的难度。 Text…

Xpath注入

这里学习一下xpath注入 xpath其实是前端匹配树的内容 爬虫用的挺多的 XPATH注入学习 - 先知社区 查询简单xpath注入 index.php <?php if(file_exists(t3stt3st.xml)) { $xml simplexml_load_file(t3stt3st.xml); $user$_GET[user]; $query"user/username[name&q…

方案分享:如何做好云中的DDoS防御?

所有企业都会有遭受DDoS攻击的风险。由于目前DDoS即服务&#xff08;DaaS&#xff09;的售价低廉&#xff0c;因此对于恶意攻击者来说&#xff0c;发起攻击比以往任何时候都更加容易&#xff0c;技术门槛也更低。分析公司IDC一项关于DDoS防御的调查显示&#xff0c;超过50%的IT…

数据结构-06-散列/哈希表

1-什么是散列表 散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就没有散列表。散列表中的元素在数组的位置(index)是通过散列函数得到的。 2-散…

【MyBatis-Plus】MyBatis进阶使用

目录 一、MyBatis-Plus简介 1.1 介绍 1.2 优点 1.3 结构 二、MyBatis-Plus基本使用 2.1 配置 2.2 代码生成 2.3 CRUD接口测试 三、MyBatis-Plus策略详解 3.1 主键生成策略 3.2 雪花ID生成器 3.3 字段自动填充策略 3.4 逻辑删除 四、MyBatis-Plus插件使用 4.1 乐…

从零开始:VuePress2 + GitHub Pages 搭建你的第一个免费博客网站

可能你也想拥有一个属于自己的博客网站&#xff0c;但是自己搭个博客网站不知道从何下手&#xff0c;而且还需要租个云服务器&#xff0c;虽然一个月只需几十块钱&#xff0c;但是我们的博客网站是要长期维护的&#xff0c;日积月累也要不少钱呢。 现在我就教你用 VuePress2 …

JVM-1-运行时数据区

程序计数器&#xff08;Program Counter Register&#xff09; 是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1]&#xff0c;字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令&…

【ICCV 2022】Masked Autoencoders Are Scalable Vision Learners

何凯明一作文章&#xff1a;https://arxiv.org/abs/2111.06377 本文的出发点&#xff1a;是BERT的掩码自编码机制&#xff1a;移除一部分数据并对移除的内容进行学习。mask自编码源于CV但盛于NLP&#xff0c;恺明对此提出了疑问&#xff1a;是什么导致了掩码自编码在视觉与语言…