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

本文介绍了蓝桥杯编程比赛的新变化,特别是使用STM32G431和cubeMX进行高级图形化编程。作者详细描述了如何利用cubeMX进行软件配置,以及如何通过HAL库简化LED控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、蓝桥杯概述

二、软件的使用

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

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

最后查看开发板效果即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KAIs32

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值