蓝桥杯嵌入式创建第一个工程(点亮led灯)

本文详细介绍了如何在蓝桥杯嵌入式项目中使用Keil软件导入STM32G431RX芯片包,配置时钟和GPIO,以及如何通过STM32CubeMX初始化LED并编写代码下载到开发板。

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

一.keil导入stm32G431RX板级芯片包

蓝桥杯嵌入式的板子是STM32G431RBT6,所以我们需要导入对应的板级芯片包,不然单片机程序会报错,允许不起来。因为芯片包里面有着对应的库函数和依赖。(如:我们学习stm32f03时也需要导入对应的板级芯片包)。下面教大家如何导入!!!!

1.1 下载板级芯片包

你们可以去STM意法半导体官网下载,但是是外网,下载较慢,博主这里百度网盘提供给你们。

链接:https://pan.baidu.com/s/1gViTBOfMTCNbvbe4-k6hJg?pwd=6666 提取码:6666

1.2 导入芯片包

1.2.1 我们首先打开keil 点击Pack installer,如图**

在这里插入图片描述

1.2.2 然后选中file→import 如图**

在这里插入图片描述

1.2.3 选择我们下好的芯片包即可

在这里插入图片描述
最后等待它下载完成即可!

1.2.4 确定安装成功

(1)先点击options for Taget

我们可以

(2)再选择Device,发现出现了STM32G4 Series ,说明安装成功!!!

在这里插入图片描述

二.使用STM32CubeMX配置功能

2.1 我们首先点击ACCESS TO MCU SELECTOR 进入配置界面

在这里插入图片描述

2.2 搜索 STM32G431RBT6

因为蓝桥杯嵌入式开发板型号为STM32G431RBT6所以我们在下图进行搜索这样更加快速,搜索完成后再双击型号,如图:
在这里插入图片描述

2.3 配置时钟

2.3.1 先点击A->Z

在这里插入图片描述

  • 然后下拉找到RCC,选择外部高速时钟里面的的无缘晶振,如图:

在这里插入图片描述

2.3.2 配置频率为72M

在这里插入图片描述

2.4 初始化LED的GPIO引脚

2.4.1 LED原理图

在这里插入图片描述 看原理图可知PC8对应着LD1,且给PC8低电平即可点亮LD1

2.4.2 配置引脚

在这里插入图片描述
(1)点击PC8,选择输出模式
在这里插入图片描述
(2)下一步配置PC8属性

(2.1)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ba3f1e90e0c450b8422d36e155a473d.png
(2.2)
在这里插入图片描述

三. 生成工程

如下图操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/d35154a18c8b47cc9676d4a65b98bd54.png在这里插入图片描述

四.点亮LED并下载到开发板

4.1 修改main.c中代码

在while(1)中添加点亮led代码(给电平)
在这里插入图片描述
然后编译程序
在这里插入图片描述

4.2 配置下载器,下载程序。

如下图操作后,最后按下复位键就能看到现象了。注意一定要按下复位键 !!!

在这里插入图片描述
在这里插入图片描述

五. 实验现象

最后实验到这里也就结束了,实验效果如下图(LD1亮),点点关注!!!.

请添加图片描述

<think>好的,我现在需要解决用户关于蓝桥杯嵌入式竞赛中如何控制多个LED的问题。首先,用户提供的引用内容里提到了几个关键点,我需要仔细分析这些信息。 根据引用[1],控制LED的方法是通过设置led_ctrl的值,例如点亮led5和led3时,led_ctrl为0001 0100,即0x14。这说明每个LED对应一个二进制位,可能通过位操作来控制。同时,闪烁的实现是通过定时器翻转特定位,使用异或操作(^=),比如led_ctrl ^= 0x01,这可能对应LED1的闪烁。 引用[3]提到了led.h文件中定义了LED函数,接受一个参数dsled,可能直接将该值写入寄存器来控制LED的状态。这说明用户需要编写函数,将特定的数值传递给LED控制寄存器,每个位对应一个LED的状态。 引用[4]中展示了使用位或操作(|=)来设置LED,例如led |= 0xff将所有LED点亮。这里需要注意,可能需要先清零再设置特定位,或者使用位掩码来单独控制某些LED而不影响其他位。 接下来,我需要整合这些信息,总结出控制多个LED的方法。首先,确定LED的硬件连接,每个LED对应寄存器中的一个位。然后,通过位操作设置或清除这些位。例如,要同时点亮LED3和LED5,需要将对应的位设为1,其他位保持0,组合成一个字节,如0x14,然后写入寄存器。 另外,闪烁和流水效果可能需要定时器中断来定时改变LED的状态。例如,在定时器中断服务函数中,每隔一定时间改变一次LED的状态,使用异或操作翻转特定位,实现闪烁效果。对于流水,可以通过左移或右移操作依次点亮不同的LED。 需要注意的问题包括防止重影(在LCD显示时可能也需要考虑LED状态的稳定),以及如何高效地进行位操作。同时,引用的示例代码中使用的是直接操作led_ctrl变量,然后调用led_control函数,这可能与具体的硬件库函数有关,需要参考相应的开发板手册。 用户可能需要具体的代码示例,比如如何初始化LED,如何设置多个LED,以及如何实现不同的效果。需要确保代码符合蓝桥杯嵌入式平台的要求,例如使用特定的头文件或函数。 最后,生成相关问题时要围绕用户可能的后续疑问,比如如何优化控制、如何结合按键控制LED,或者如何处理多个任务中的LED显示问题。</think>在蓝桥杯嵌入式竞赛中,控制多个LED的实现方法主要涉及硬件寄存器操作和位运算控制。以下是具体实现步骤及示例: ### 一、硬件基础 LED控制通过GPIO端口寄存器实现,每个LED对应寄存器中的一个二进制位。例如: - 若开发板LED连接至PD0-PD7,则$$led\_ctrl$$变量对应PD端口8位状态 - 二进制位为1时点亮对应LED,如$$0x14$$(0001 0100)对应LED3和LED5亮 ### 二、核心实现方法 1. **单控制** ```c led_ctrl |= (1 << n); // 点亮第n个LED(从0开始计数) led_ctrl &= ~(1 << n); // 关闭第n个LED ``` 2. **多组合控制** ```c // 同时点亮LED3和LED5(示例对应CT117E开发板) led_ctrl = 0x14; // 二进制0001 0100 led_control(led_ctrl); // 调用硬件控制函数[^3] ``` 3. **状态翻转控制** ```c led_ctrl ^= (1 << n); // 翻转第n个LED状态 ``` ### 三、典型应用示例 #### 1. 流水实现 ```c void flow_led() { static uint8_t pattern = 0x01; led_ctrl = pattern; pattern = (pattern << 1) | (pattern >> 7); // 循环左移 HAL_Delay(200); } ``` #### 2. 组合闪烁控制 ```c void blink_led() { if(HAL_GetTick() - last_tick >= 500) { led_ctrl ^= 0xAA; // 交替闪烁偶数位LED last_tick = HAL_GetTick(); } } ``` ### 四、注意事项 1. 操作前需初始化GPIO为推挽输出模式 2. 组合控制时建议使用位运算而非直接赋值,避免影响其他位状态 3. 闪烁控制需配合定时器中断或系统滴答计时器[^1] 4. LCD显示时需注意刷新间隔与LED控制的时序配合[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

VersionGod

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

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

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

打赏作者

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

抵扣说明:

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

余额充值