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

目录

一、蓝桥杯概述

二、软件的使用

三、点亮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之间编写如下代码:

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

最后查看开发板效果即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…

QT安装与helloworld

文章目录 QT安装与helloworld1.概念&#xff1a;2.安装QT3.配置环境变量4.创建项目5.运行效果 QT安装与helloworld 1.概念&#xff1a; Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处&#xff1a;提供首个专为支持跨平台开发而设计的…

跟着小德学C++之启动监听

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

顺序图(Sequence Diagram)

也叫时序图、序列图 一、定义 顺序图是用来描述对象自身及对象间信息传递顺序的视图。 二、要素 活动者,对象,生命线,控制焦点,消息(同步消息,异步消息,返回消息,自关联消息) 1、 活动者 活动者发出情况或者接收系统的服务。 2、 对象 对象是特定行为与属性的集合。 表…

uniapp 使用renderjs引入echarts

效果图&#xff1a; 1.1renderjs引入echarts 组件zmui-echarts.vue&#xff1a; <template><view class"zmui-echarts" :prop"option" :change:prop"echarts.delay"></view> </template><script>export defaul…

互联网加竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…

qt学习:mplayer播放器(视频)+arm如何播放视频实战+c启动播放器

目录 作用 linux下载 arm下载 使用方法 键盘 命令 命令词有很多&#xff0c;举例几个 在arm上qt实战 配置ui界面 添加头文件&#xff0c;成员&#xff0c;函数 添加视频按钮点击事件 列表选项双击事件 播放按钮点击事件 暂停继续按钮点击事件 停止按钮点击事件 …

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…

Linux系统调试课:Linux错误码介绍

文章目录 一、错误码二、错误码返回案例三、使用 goto 语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢错误代码由内核或用户空间应用程序(通过errno变量)解释。错误处理在软件开发中非常重要,而不仅仅是在内核开发中。幸运的是,内核提供的几种错误,几乎涵盖了可…

一步步建立一个C#项目(连续读取S7-1500PLC数据)

首先创建一个新项目 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来右键解决方案&#xff0c;点击管理NuGet程序包 6、NuGet程序包 7、安装S7net 8、点击安装 9、安装完成 …

杨幂《哈尔滨1944》现场无剧本,大胆突破令人惊艳。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 杨幂在《哈尔滨1944》的拍摄现场&#xff0c;竟然不带剧本&am…

空想--让MYSQL安装双引擎SQL优化器

坑人的innodb_thread_concurrencyMYSQL的优化器是硬解析, 应用每次发往MYSQL的SQL是文本格式,需要编译,虽然时间不多,也就几百毫秒的事情,可架不住SQL的请求并发量啊! 为此数据库走了两条路线, 一条是ORACLE的缓存路线, 另外一条就是MYSQL的快速路线. ORACLE是尽可能的深度…

【电路】500W 12V至220V的逆变器

本电路采用LT1073芯片DC&#xff0d;DC转换器&#xff0c;将1.5V电压升压到5V或12V。该IC有三个不同的版本&#xff0c;这取决于输出电压。两个具有5V和12V的固定输出电压&#xff0c;而最有趣的是&#xff0c;可以进行调整。该调整是通过两个电阻器的分压器&#xff0c;连接到…

有没有那种不烂大街的跨年文案?

​迎接新年的曙光&#xff1a;那些不落俗套的跨年文案 当钟声敲响&#xff0c;旧的一年逝去&#xff0c;新的一年悄然来临&#xff0c;我们总希望用一些特别的话语来表达对过去的怀念和对未来的期待。在这个信息爆炸的时代&#xff0c;许多跨年文案都已经被人们看过无数次&…

数据结构第十天(排序算法总结)

目录 前言 常数时间复杂度&#xff1a;O(1) 线性时间复杂度&#xff1a;O(n) 线性对数时间复杂度&#xff1a;O(n log n) 平方时间复杂度&#xff1a;O(n^2) 对数时间复杂度&#xff1a;O(log n) 前言 排序算法的学习可以告一段落了。但算法的学习永不停止。 今天&…

RBAC权限控制系统-手撸RBAC

手撸RBAC 一、概述 1、什么是RBAC RBAC&#xff08;Role-Based Access Control&#xff09;是一种访问控制机制&#xff0c;它基于角色的概念&#xff0c;将权限授予特定的角色&#xff0c;而不是直接授予个体用户。 这种模型允许管理员根据用户的角色来管理他们的权限&…

elementPlus实现动态表格单元格合并span-method方法总结

最近在做PC端需求的时候&#xff0c;需要把首列中相邻的同名称单元格合并。 我看了一下elementPlus官网中的table表格&#xff0c;span-method可以实现单元格合并。 我们先看一下官网的例子&#xff1a; 合并行或列 多行或多列共用一个数据时&#xff0c;可以合并行或列。 …