2025年第16届蓝桥杯嵌入式竞赛学习笔记(二):点亮LED

1.新建工程

使用第一章配好的STM32CubeMX和Keil5

 

2.查看数据书册及图形化配置

打开CT117E-M4产品手册

e01e317c1c6c4ece84f676429b2cd9e7.png

 

查看LED灯的原理图

d17e0b6376c447a0a3c51aa10f96380a.png

LED的引脚为PC8-PC15,引脚为低电平时LED点亮

U1为锁存器,锁存器的使能端PD2为高电平时,LED灯才会被点亮

正确点灯步骤:

①先PD2输出高电平

②PC8-PC15输出低电平

③PD2输出低电平

 

图形化配置,将PC8-PC15,PD2均设为输出模式

单击要配置的引脚,选择GPIO_Output

f8ae6bbdbe0e4643944dfdfaf241c8f6.png

 

将引脚配置完成后,进入GPIO设置界面,将引脚初始模式全部设为高电平

300d6221162b45938421e8247bf93ceb.png

点击导航栏右侧 GENERATE CODE 生成项目

 

3.代码部分

先将比赛中可能用到的头文件整合到一个.h文件中,我这里命名为headfile.h

#ifndef _HEADFILE_
#define _HEADFILE_

#include "stm32g4xx.h"
#include "stdio.h"
#include "string.h"
#include "stdint.h"
#include "main.h"
#include "gpio.h"



#endif

 

点开魔法棒,选择C/C++,点击Include Paths栏最后的三个点,选择headfile.h的路径

5e52f5b35d014fe081d1bab8d3b1194e.png

 

新建led.c文件

#include "headfile.h"

void led_show(uint8_t led,uint8_t mode)
{
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	
	if(mode)
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 << (led - 0x01),GPIO_PIN_RESET);
	else
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 << (led - 0x01),GPIO_PIN_SET);
	
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

该函数首先将PD2拉高

判断mode,mode为1时将传过来的引脚号置低电平也就是点亮LED。为0时置高电平,也就是熄灭LED

因为在HAL库中GPIO引脚顺序是按二进制排序的,哪位为1即是哪个引脚

#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */

所以我们只需传个参数,让GPIO_PIN_8相应左移即可

完成操作后再将PD2置低电平

 

led.h文件内容如下,并将此文件在headfile.h中引用一下:#include "led.h"

#ifndef _LED_H_
#define _LED_H_

#include "stm32g4xx.h"

void led_show(uint8_t led_pin,uint8_t mode);

#endif

在.h文件中需声明一下.c中创建函数才可使用

在main.c中引用头文件#include "headfile.h"

 

编辑main函数

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		led_show(1,1);
		led_show(4,1);
		led_show(8,1);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

4.编译并烧录

点击导航栏的全部编译,输出窗口显示0错误

ea60abbbcdb6407db5d95dcdfa6325f9.png

将烧录线一端连接至电脑的USB口,另一端连接至开发板的Download下载口

 

连好之后点击烧录按钮

3c034f2c219547e68a700082c7792896.png

烧录完成后发现开发板上第1、4、8的LED灯亮起

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值