蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)

news2024/9/21 20:40:21

目录

一、蓝桥杯概述

二、软件的使用

三、点亮LED


一、蓝桥杯概述

        蓝桥杯是一个编程大赛、商赛,获奖率高达60%(省赛中一等奖10%、二等奖20%、三等奖30%),但这并不影响它的含金量,多所高校将它列为A类赛事并实行保研加分政策,在全国大学生竞赛含金量排行中也有较高的排名

        近几年蓝桥杯开发了嵌入式和单片机赛道,经过我多方面的了解,我认为对电子信息类专业学生来说,这两个赛道均可以对我们的编程能力和专业能力带来不小的提高,所以我报名了蓝桥杯并在此记录我的学习过程。

        新一届的蓝桥杯采用STM32G431的芯片,抛弃了库函数编程的方式,转为使用高级图形化编程软件cubeMX利用HAL库进行编程,这极大降低了STM32的自主编程难度。并且,STM32官方已经停止了标准库的更新,HAL在持续更新中,这也说明了在未来STM32的发展趋势。在我看来,标准库和HAL库都是必须要学的。

二、软件的使用

(1)软件方面,首先需要下载安装cubeMX

(2)打开后是以下界面,我们先新建一个工程用来进行图形化编程

(3)点击左上角的File > New Project

(4)接着,进入以下界面选择我们的芯片类型:STM32G431RB,并选择标注LQFP64的方形芯片,最后点击右上角Start Project正式开始编程

(5)进入如下界面后,先点击System Core > RCC时钟选项,如图步骤所示打开高速时钟设置

(6)再点击SYS >Debug ,选择串口通信方式

(7)接着按照下图步骤修改时钟参数,改成STM32G431官方手册上的参数即可,以下提供修改后的参数图

(8)然后按照下图步骤设置项目名称项目代码使用的IDE,注意,名称中不要出现中文,使用MDK-ARM进行编程

(9)最后,按下图步骤选择每次都加载保留.c/.h文件,这样操作后可以简化以后的编程步骤,但是减慢程序的编译速度。选择完成后,点击右上角的GENERATE CODE,生成代码,点击Open Folder可以打开代码所在的文件夹

(10)打开代码后,点击左上角魔术棒

(11)按照下图步骤选择CMSIS-DAP的下载方式

(12)再按照下图所示选择下载后运行的方式即可

至此,cubeMX的软件使用方式已经记录完毕,接下来将学习记录点亮第一个LED

三、点亮LED

        所谓的图形化编程,实际上就是可以通过cubeMX上芯片引脚的设置同步代码的编写,例如:在cubeMX上将芯片的PC8引脚设置为推挽输出模式,再点击生成代码,即可得到名为gpio.h的头文件,在编程时就不用自己再编写PC8引脚的初始化代码,包括时钟的初始化、输出模式的设置等,直接调用即可。

        所以,当我们需要点亮一颗LED时,第一步就是打开cubeMX进行引脚的设置,如下图所示,选择GPIO选项后,点击右图芯片中需要使能的引脚,并设置为需要的模式,例如点亮LED时,根据官方手册,八个LED的引脚分别为PC8~PC15,并且设置了PD2为锁存器引脚,避免LCD显示屏和LED使用相同引脚时LED频闪,所以将PC8~PC15和PD2都设置为输出模式,即GPIO_Output

设置完引脚模式后,选中LED对应的引脚后设置为外接高电平,这表示当IO口内部设置为低电平时LED亮起

最后再点击右上角GENERATE CODE生成新代码

打开代码后新建两个文本并保存为led.h、led.c,并进行魔术棒添加路径等操作,具体操作就不过多记录,具体记录代码编写

打开led.h文件,如下编写代码:

//led.h

#ifndef _LED_H
#define _LED_H

#include "main.h"

void LED(uchar dsled);

#endif

其中,需要在"main.h"中添加宏定义uchar、uint如下:

//main.h

#define uchar unsigned char
#define uint unsigned int

注意,除自己创建的文本外,其他所有的代码需要写在注释中BEGIN和END之间,如下图所示

打开led.c文件,如下编写代码:

//led.c

#include "led.h"

void LED(uchar dsled)
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);    //打开锁存器
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET);  //灭掉所有的LED
	HAL_GPIO_WritePin(GPIOC, dsled<<8, GPIO_PIN_RESET);    //选择特定的LED亮起
}

其中,需要特别注意的是:

dsled<<8的含义是:将dsled代表的数字左移8位,原因是八个LED从PC8开始,有0-7八个空位

例如:令dsled = 0x01,即0000 0000 0000 0001,代表的是第一位为高电平,左移八位后为:0000 0001 0000 0000 ,代表的是第八位为高电平,即第一个led点亮。

打开主函数,在while循环中的BEGIN和END之间编写如下代码:

编写完成后,编译无误后进行下载

最后查看开发板效果即可

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

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

相关文章

React+Echarts实现数据排名+自动滚动+Y轴自定义toolTip文字提示

1、效果 2、环境准备 1、react18 2、antd 4 3、代码实现 原理&#xff1a;自动滚动通过创建定时器动态更新echar的dataZoom属性startValue、endValue&#xff0c;自定义tooltip通过监听echar的鼠标移入移出事件&#xff0c;判断tooltTip元素的显隐以及位置。 1、导入所需组…

阿里云游戏服务器租用价格表,2024最新报价

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

C语言之随心所欲打印三角形,金字塔,菱形(倒金字塔)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 目录 三角形 金字塔 倒金字塔 菱形 三角形 题目&#xff1a;根据输入的行数打印对应的三角形。&#xff08;用 * 号打印&#xff09; #includ…

亚信安慧AntDB构建繁荣生态的数据库管理系统

亚信安慧AntDB是一款数据库管理系统&#xff0c;它采用全球影响力大、社区繁荣、开放度高、生态增长迅速的PG内核。这款系统具有卓越的性能和稳定性&#xff0c;在全球范围内备受用户青睐。与此同时&#xff0c;AntDB的社区也是充满活力的&#xff0c;用户可以在社区中交流经验…

Java设计模式大全:23种常见的设计模式详解(三)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…

Springboot项目报文加密(AES、RSA、Filter动态加密)

Springboot项目报文加密(AES、RSA、Filter动态加密) 一、痛点1.1、初版报文加密二、前期准备2.1、AES加密2.2、RSA加密2.3、国密算法概述2.4、国密SM22.5、国密SM32.6、国密SM42.7、JAVA中的拦截器、过滤器2.8、请求过滤器2.9、响应过滤器2.10、登录验证码2.11、BCrypt非对称…

【力扣 51】N 皇后(回溯+剪枝+深度优先搜索)

按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种…

C++ 11/14/17 智能指针

1. 简介 为了更加容易&#xff08;更加安全&#xff09;的使用动态内存&#xff0c;引入了智能指针的概念。智能指针的行为类似常规指针&#xff0c;重要的区别是它负责自动释放所指向的对象。 标准库提供的两种智能指针的区别在于管理底层指针的方法不同&#xff1a;shared_p…

【MATLAB】使用随机森林在回归预测任务中进行特征选择(深度学习的数据集处理)

1.随机森林在神经网络的应用 当使用随机森林进行特征选择时&#xff0c;算法能够为每个特征提供一个重要性得分&#xff0c;从而帮助识别对目标变量预测最具影响力的特征。这有助于简化模型并提高其泛化能力&#xff0c;减少过拟合的风险&#xff0c;并且可以加快模型训练和推理…

时间序列特有的交叉验证方法GroupTimeSeriesSplit

一、前言 对于时间序列的任务的交叉验证&#xff0c;很核心的问题在于数据是否leak&#xff0c;因为较其他数据最为不同的是时间信息&#xff0c;有先后的发生顺序。 如果用简单的打散数据顺序&#xff0c;之后抽取&#xff0c;进行交叉验证肯定是违反这个时间顺序的规则的&…

有趣的CSS - 多彩变化的按钮

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 这个按钮效果主要使用 :hover 、:active 伪选择器以及 animation 、transition 属性来让背景色循环快速移动形成视觉效果。 核心代码部分&#xff0c;简要说明了写法思路&…

shell脚本基础语法(.sh ./ sh bash source shell)

Linux 之 Shell 脚本基础语法 0. 学习一门语言的顺序 1. Shell 编程概述 1.1 Shell 名词解释 在 Linux 操作系统中&#xff0c;Shell 是一个命令行解释器&#xff0c;它为用户提供了一个与操作系统内核交互的界面。用户可以通过 Shell 输入命令&#xff0c;然后 Shell 将这些…

Redis -- zset有序集合

聪明在于勤奋&#xff0c;天才在于积累。 目录 zset 有序集合 zset相关命令 zadd zcard zcount zrange zrevrange zrangebyscore zpopmax bzpopmax zpopmin bzpopmin zrank zscore zrem zRemRangeByRank zRemRangeByScore zincrby 集合间操作 zinte…

mac电脑快捷指令实现拼图

mac访达&#xff0c;搜索输入‘快捷指令’&#xff0c;找到‘快捷指令’&#xff0c; 点击快捷指令&#xff0c;进入快捷指令中心&#xff0c;搜索‘拼图’ &#xff0c;选中‘照片拼图’&#xff0c; 点击‘添加快捷指令’&#xff0c; 在‘所有快捷键指令’中可以看到添加的快…

Unity C#进阶案例 “泛型编程”

文章目录 泛型基础示例1&#xff1a;泛型类与方法示例2&#xff1a;泛型方法示例3&#xff1a;泛型约束示例4&#xff1a;泛型委托与事件示例5&#xff1a;泛型单例模式&#xff08;Unity&#xff09; 在Unity中&#xff0c;C#的泛型编程是一种强大的工具&#xff0c;它允许你编…

对网络流水印的调查

文章信息 论文题目&#xff1a;Network Flow Watermarking: A Survey 期刊&#xff08;会议&#xff09;&#xff1a; IEEE Communications Surveys & Tutorials 时间&#xff1a;2016 级别&#xff1a;中科院1区 文章链接&#xff1a;https://ieeexplore.ieee.org/stamp/…

JCTC | 利用几何深度学习对蛋白质-配体结合pose进行等变灵活建模

Overview 该论文解决了药物开发中蛋白质-配体复合结构灵活建模的挑战。作者提出了一种名为FlexPose的新型深度学习框架&#xff0c;它可以直接对复杂结构进行建模&#xff0c;而不需要传统的采样和评分策略。 该模型结合了标量-向量双特征表示和 SE(3)等变网络设计来处理动态结…

AI数字人训练数据集汇总

唇读&#xff08;Lip Reading&#xff09;&#xff0c;也称视觉语音识别&#xff08;Visual Speech Recognition&#xff09;&#xff0c;通过说话者口 型变化信息推断其所说的内容&#xff0c;旨在利用视觉信道信息补充听觉信道信息&#xff0c;在现实生活中有重要应用。例如&…

SpringCloud-创建多模块项目

在微服务架构中&#xff0c;项目的组织结构对于代码的维护和团队的协作至关重要。Spring Cloud作为一个强大的微服务框架&#xff0c;提供了丰富的功能和组件&#xff0c;同时也支持多模块项目的创建&#xff0c;使得代码结构更加清晰、易于管理。本文将介绍如何使用 Spring Cl…

【教程】Linux使用git自动备份和使用支持文件恢复的rm命令

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景介绍 首先非常不幸地告诉你&#xff1a;Linux 系统的标准 rm 命令不支持文件恢复功能。一旦使用 rm 删除了文件或目录&#xff0c;它们就会从文件系统中永久删除&#xff0c;除非你使用专门的文件恢复工具尝试…